【发布时间】:2015-12-17 12:27:53
【问题描述】:
所以我有 SessionHandler 类,以及我的其他文件,像这样 (cfg_session.php):
use \Classes\MySessionHandler as Sessao;
$sessao = new Sessao();
// PHP < 5.4
session_set_save_handler(
array($sessao, 'open'),
array($sessao, 'close'),
array($sessao, 'read'),
array($sessao, 'write'),
array($sessao, 'destroy'),
array($sessao, 'gc')
);
register_shutdown_function('session_write_close');
session_start();
好的,小的区别是我在本地网络中使用:
session_set_save_handler($sessao)
因为,在我的localweb中,其实是PHP > 5.5。
它在我的本地网络上运行良好,我刷新页面,注销,登录,关闭标签,打开标签,再次登录,一切正常,我浏览器中的 PHPSESSID 等于在会话中创建的文件等等。
编辑:我有一个 PHP
然后,我尝试再次正常登录,它让我登录,就好了。每个请求都具有相同的 ID,session_regenerate_id() 工作正常,一切正常,PHPSESSID 与创建的会话文件匹配。
但是,如果我注销,关闭该选项卡,打开一个新选项卡并尝试登录(或者只是关闭选项卡而不注销),它只会做同样的事情:让我登录,创建一个会话文件,但随后,它再次更改 de session_id 并将我踢出去。
我真的坚持这一点。不能确定这是因为 PHP
注意事项: - session_regenerate_id() 用于登录、检查是否有会话(然后更新时间和regenerateId)以及注销。
- cfg_session.php 需要一次在需要使用会话变量的每个页面上。
我需要对此有所了解。我已经看到了很多主题,但没有一个非常有用或接近解决这种奇怪的行为。提前致谢。
【问题讨论】:
标签: php session session-set-save-handler