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机制失效,仍旧采用系统的!


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

PHP保存session默认的是采用的文件的方式来保存的,这仅仅在文件的空间开销很小的windows上是可以采用的,但是如果我们采用uinx或者是liux上的文件系统的时候,这样的文件系统的文件空间开...
  • u013707844
  • u013707844
  • 2014年05月21日 14:54
  • 1462

PHP的session_set_save_handler 执行机制

/* 02 Session open (called by session_start( )) 03 Session close (called...
  • xingmeng916
  • xingmeng916
  • 2012年02月14日 11:01
  • 9524

session_set_save_handler()函数注意细节

session_set_save_handler  设置用户自定义会话存储函数 例如: 如果想使用 PHP 内置的会话存储机制之外的方式, 可以使用本函数。 例如,可以自定义会话存储函数...
  • beyond__devil
  • beyond__devil
  • 2016年08月30日 17:33
  • 2233

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

  • yanhui_wei
  • yanhui_wei
  • 2014年12月30日 15:07
  • 1906

php session_set_save_handler 函数的用法(mysql)

  • tianmo2010
  • tianmo2010
  • 2012年07月13日 19:30
  • 3167

session_set_save_handler 函数用法

session_set_save_handler (PHP4 > = 4.0b4) void session_set_save_handler (string open, string clos...
  • bingqingsuimeng
  • bingqingsuimeng
  • 2014年02月26日 13:28
  • 3825

在Handler中使用Session

 最近需要做一个对特定请求进行响应的接口,只是在内部处理,不存在UI,机于这种情况,当然是使用实现IHttpHandler来进行处理,可以减 掉加载HTML 控件的时间。本来都是这样想的,对于IHtt...
  • shulin85
  • shulin85
  • 2011年03月16日 22:49
  • 2835

PHP中用户自定义Session处理机制

session.save_handler = user,也可在 PHP 中进行设置:ini_set(‘session.save_handler’, ‘user’); 注意一定要把 “session....
  • soonfly
  • soonfly
  • 2016年08月10日 19:48
  • 2486

,使用session_set_save_handler,接管所有的session管理工作流程

,使用session_set_save_handler,接管所有的session管理工作,一般是把session信息存储到数据库,这样可以通过SQL语句来删除所有过期的session,精确地控制ses...
  • superhosts
  • superhosts
  • 2014年03月28日 01:19
  • 1431

javaWeb开发过程中小细节总结(1)

初次接触freemark和bootstrap,使用过程中会遇到很多需要注意的小细节。此博文将不断的总结本人在使用过程中遇到的问题。 1.freemark 时间设置 ${content.createT...
  • yin767833376
  • yin767833376
  • 2016年06月13日 11:08
  • 726
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:session_set_save_handler()函数注意细节
举报原因:
原因补充:

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