数据库里保存会话

在默认情况下,php的会话数据保存在服务器的临时目录中,文件名为sessionid。

将会话信息保存到数据库有3个原因:(1)在共享主机服务器上,所有web站点都使用同一个临时目录,这意味着数十个程序都在同一个位置进行文件读取的操作,我们很容易就可以编写一个脚本从这个目录里读取所有的数据。(2)如果站点运行在多个服务器上,同一个用户在一个会话过程中可能会对不同的服务器上的多个页面产生请求,而会话数据如果保存在某台服务器上的文件里,就不能被其他服务器上的页面所使用;(3)更方便检索站点回话的信息,可以查询活动回话的数量,还可以进行备份。


第一步:创建session表。字段:会话id,会话数据,最后一次访问时间。

第二步:定义会话函数。会话包含的函数应该有:启动会话,关闭会话,读取会话数据,写入会话数据,销毁会话数据,旧会话数据被剔除(垃圾数据回收)

<?php


class SESSION
{
 private $table="session" ;#表名
 
 private $id= "id"; #表里存放会话的ID号栏名称
 
 private $col_name = "data"; #表里存放会话的数据栏名称
 
 private $time = "time"; #表里存放会话的时间栏名称
 
 
 function__construct($table,$id,$col_name,$time)
 {
  $this->table =$table ? $table : $this->table;
  
  $this->id = $id? $id : $this->id ;
  
  $this->col_name= $col_name ? $col_name : $this->col_name ;
  
  $this->time =$time ? $time : $this->time;
 }
 
 #打开会话
 function open_session()
 {
  global $DB ;
  
  $res =$DB->db_connect();
  
  return $res ? true : false;
 }
 
 #关闭会话
 function close_session()
 {
  global $DB ;
  
  return $DB->db_close() ;
  
 }
 
 #读取会话
 function read_session($id)
 {
  global $DB ;
  
  if (!$id) return "";
  
  $sql =$DB->db_select($this->table,array("{$this->col_name}"),array("{$this->id}"=>$id));
  
  $data =$DB->db_fetch_array($sql) ;
  
  if($DB->db_num_rows($sql)==1)
  {
   return$data[0][$this->col_name];
  }else {
   
   return"";
  }
 }
 
 #写入数据函数
 function write_session($id,$data)
 {
  global $DB ;
  
  $sessArr =array("id"=>$id,"{$this->col_name}"=>$data);
  
  return$DB->db_replace($this->table,$sessArr);
 }
 
 #销毁会话函数
 function destroy($id)
 {
  global $DB ;
  
  $DB->db_delete($this->table,array("{$this->id}"=>$id));
  
  $_SESSION[]=array();
  
  returnmysql_affected_rows($DB->db_connect);
 }
 
 #会话垃圾收集函数
 
 function clean_session($expire)
 {
  global $DB ;
  
  $sql = "delete from`{$this->table}` whereDATE_ADD({$this->time}, INTERVAL (int){$expire}SECOND ) < NOW()";
  
  $DB->db_query($sql);
  
  returnmysql_affected_rows($DB->db_connect());
 }
 
 #会话调用函数
 
 function start_session()
 {
  session_set_save_handler('open_session','close_session','read_session','write_session','destroy_session','clear_session');
  
  session_start();
 
 
 





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值