php session 自定义到数据库,PHP SESSION之自定义存储方式

在php中session中的数据默认是以文件形式存储在磁盘上的,这对小型网站来说,可能已经可以满足要求了。大事对于大中型网站,或者一些有特殊需求的网站来说,默认的存储方式已经不能够满足要求了!他们需要自己定义session的存储方式,以便这些session中的数据可以在多台服务器之间共享!

对此php提供了一个函数来解决

bool session_set_save_handler ( string open, string close, string read, string write, string destroy, string gc )

函数中一个参数对应一个函数,函数的名称自定但参数为固定格式,没有用到也要。

一、open(string save_path, string session_name)为session_start 参数string save_path session存取路径 string session_name传递session id的cookie名字。

function _session_open(string save_path, string name)

{

$db=mysql_connect("localhost","root","123456","tendao");

return TRUE;

}

二、close为session_close 无参数

在此对应关闭数据库,但一般网站中在此一般不要关闭。

三、read(key)为读取session键值。key对应session id。

四、write(key,date)其中的data对应设置的session变量,格式如下:

email_name|s:13:"qqtxt@163.com";member_id|s:1:"1";

五、destroy(key)注销session

在此程序段中对应删除对应记录项。

六、gc(expiry_time)清除过期session记录。

表的结构 `session`

--

Create TABLE `session` (

`session_key` char(32) NOT NULL,

`session_data` char(255) NOT NULL,

`session_expiry` int(11) unsigned NOT NULL,

PRIMARY KEY (`session_key`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;字符集根据情况更改

class Session{

var $expiry=3600;

var $db;

function __construct(){

$this->Session();

}

function Session(){

session_set_save_handler( array (& $this, "_session_open"),

array (& $this, "_session_close"),

array (& $this, "_session_read"),

array (& $this, "_session_write"),

array (& $this, "_session_destroy"),

array (& $this, "_session_gc")

);

}

/**

* open session handler

*

* @param string $save_path

* @param string $session_name

* @return boolen

*/

function _session_open($save_path, $session_name)

{

$this->db=mysql_connect("localhost","root","123456") or die("数据库连接失败!");

mysql_select_db("tendao",$this->db);

return TRUE;

}

function _session_close(){

return true;

}

function _session_read($key){

$expiry=time();

$s_query=sprintf("select session_data from session where session_key= '%s' and session_expiry > %d " , $key, $expiry );

$result=mysql_query($s_query,$this->db);

$row=mysql_fetch_assoc($result);

if($row){

return $row['session_data'];

}

else

return FALSE;

}

function _session_write($key,$data){

$expiry_time=time()+$this->expiry;

$s_query=sprintf("select session_data from session where session_key= '%s'", $key);

$result=mysql_query($s_query,$this->db);

if(mysql_num_rows($result)==0){

$s_query=sprintf("insert into session values('%s','%s', %d)",$key,$data,$expiry_time);

$result=mysql_query($s_query,$this->db);

}

else{

$s_query=sprintf("update session set session_key='%s', session_data='%s',session_expiry=%d where session_key='%s'",$key,$data,$expiry_time,$key);

$result=mysql_query($s_query,$this->db);

}

return $result;

}

function _session_destroy($key){

$s_query=sprintf("delete from session where session_key= '%s'", $key);

$result=mysql_query($s_query,$this->db);

return $result;

}

function _session_gc($expiry_time){

$expiry_time=time();

$s_query=sprintf("delete from session where session_expiry < %d", $expiry_time);

$result=mysql_query($s_query,$this->db);

return $result;

}

}

$_ses_=new Session();

session_start();

$_SESSION['time']=time()+1200;

echo strval(time()).'
'.strval($_SESSION['time']);

?>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值