session_set_save_handler()函数注意细节

原创 2016年08月30日 17:33:37

session_set_save_handler  设置用户自定义会话存储函数

例如:

如果想使用 PHP 内置的会话存储机制之外的方式, 可以使用本函数。

例如,可以自定义会话存储函数来将会话数据存储到数据库。两种使用方式:

1.PHP5.4之前

bool session_set_save_handler ( callable $open , callable $close , callable $read , 

callable $write , callable $destroycallable $gc [, callable $create_sid ] ) 2.PHP5.4之后

bool session_set_save_handler ( SessionHandlerInterface $sessionhandler [, bool $register_shutdown = true ] )

详情,可查看PHP手册:

http://php.net/manual/zh/function.session-set-save-handler.php

还是摘自手册中的内容:

$handler = new FileSessionHandler(); // 我们自定义了一个session处理类,包含必须的几个方法
session_set_save_handler(
     array(
$handler'open'),
     array(
$handler'close'),
     array(
$handler'read'),
     array(
$handler'write'),
     array(
$handler'destroy'),
     array(
$handler'gc')
    );

// 下面这行代码可以防止使用对象作为会话保存管理器时可能引发的非预期行为
register_shutdown_function('session_write_close');

session_start();
// 现在可以使用 $_SESSION 保存以及获取数据了

这里主要是想说:

使用session_set_save_handler(),得记得使用 'register_shutdown_function',手册中是这样解释的:

在脚本执行完毕之后,PHP 内部会清除对象, 所以有可能不调用 write 和 close 回调函数。 这样可能会引发非预期

的行为,所以当使用对象作为会话保存管理器时, 需要通过注册 shutdown 回调函数来规避风险。 通常,你可以通过

调用 register_shutdown_function() 函数 来注册 'session_write_close' 回调函数。


接下来提到的非常关键的一点,是项目中真实出现的,而这个问题,我是真不知道,因为自定义的session机制,我没写过,都是进公司就是直接使用别人写好的,二次开发产品,肯定也是,所以,调试的过程中,很多应用问题,确实根本就没碰到过:

使用了自定义的session机制,php.ini 中的session.auto_start,必须设置为false。否则自定义的session机制失效,仍旧采用系统的!


PHP的session_set_save_handler 执行机制

/* 02 Session open (called by session_start( )) 03 Session close (called...

利用session_set_save_handler()函数将session保存到MySQL数据库中

PHP保存session默认的是采用的文件的方式来保存的,这仅仅在文件的空间开销很小的windows上是可以采用的,但是如果我们采用uinx或者是liux上的文件系统的时候,这样的文件系统的文件空间开...

session_set_save_handler()函数的实例

/**CREATE TABLE IF NOT EXISTS `sessions` (  `session` varchar(255) character set utf8 collate utf8_b...
  • zf213
  • zf213
  • 2009年06月22日 12:57
  • 4154

使用数据库保存session的方法

使用数据库保存session的方法,阅读使用数据库保存session的方法,php的session默认是以文件方式保存在服务器端,并且在客户端使用cookie保存变量,这就会出现一个问题,当一个用户由...

【session内部机制】PHP的session_set_save_handler 执行机制

session_set_save_handler 函数用法

session_set_save_handler (PHP4 > = 4.0b4) void session_set_save_handler (string open, string clos...

CodeIgniter框架源码笔记(10)——SESSION类之用户接口CI_SESSION

初始化 Session 类:this−>load−>library(‘session′);初始化之后,就可以使用this->load->library(‘session’); 初始化之后,就可以使...
  • soonfly
  • soonfly
  • 2016年08月19日 08:21
  • 1754

php session_set_save_handler 函数的用法(mysql)

session_set_save_handler函数的用法

session_set_save_handler   (PHP4   > =   4.0b4) void   session_set_save_handler   (string   open,...

php session_set_save_handler 函数的用法(file)

以下只是介绍一些函数的简单用法: void session_set_save_handler (string open, string close, string read, string writ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:session_set_save_handler()函数注意细节
举报原因:
原因补充:

(最多只允许输入30个字)