所以我有SessionHandler类,那它放入像这样(cfg_session.php)运动我的其他文件:SESSION_ID行为古怪
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();
好吧,小不同的是,在我的localweb我使用:
session_set_save_handler($sessao)
因为在我的localweb中,实际上PHP> 5.5。
它在我的localweb上运行得非常好,我刷新页面,注销,登录,关闭标签页,打开标签页,再次登录,一切正常,我的浏览器中的PHPSESSID等于创建的会话文件等。
编辑:我有一个PHP < 5.4的服务器,而我事实上,使用上面的代码,意味着PHP < 5.4,但它仍然是怪怪的。刷新浏览器,它会创建另一个会话文件,但不会更改PHPSESSID。我第一次尝试登录时,过程如下所示:它创建会话文件,我将用户重定向到某个页面,该页面在服务器上执行另一个请求,它只创建与PHPSESSID完全不同的另一个会话文件,当然,该应用程序将我注销。这是奇怪的部分。
但是,然后,我尝试再次正常登录,它将我登录,很好。每个请求都具有相同的ID,session_regenerate_id()工作正常,一切正常,PHPSESSID与创建的会话文件相匹配。
但是,如果我注销,关闭该选项卡,打开一个新选项卡并尝试登录(或关闭选项卡而不注销),它只是做同样的事情:记录我,创建会话文件,但然后,它再次更改de session_id并将我踢出去。
我真的被困在此。不能确定这是否因为PHP < 5.4或其他。
注: - session_regenerate_id()正在使用在日志中,上检查如果有会议注销(然后更新时间和调用regenerateId)和。
- cfg_session.php需要一次每一页需要使用会话变量上。
我需要一些这方面的信息。我已经看到很多主题,但没有很多信息或接近解决这种奇怪的行为。提前致谢。
我编辑帖子,看看我是否更清楚,我认为它错过了信息。但事情是:我使用的服务器的PHP不到5.4,我使用上面的代码在PHP中使用少于5.4,好吗?但它仍然很怪异。 –
该功能不适用于5.4以下的php,如果功能不可用,那么你如何使用它..... – Vineet1982