所以我有SessionHandler类,以及我的另一个文件(cfg_session.php):
use ClassesMySessionHandler 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。
它在我的本地网络上运行得很好,我刷新页面,注销,登录,关闭选项卡,打开选项卡,再次登录,一切都很正常,我浏览器中的PHPSSID等于在会话文件上创建的PHPSSSID,等等
EDIT:我有一个带有PHP<5.4,事实上,我正在使用上面的代码,这意味着PHP<5.4,但它仍然表现得很奇怪。刷新浏览器,它会创建另一个会话文件,但不会更改PHPSSID。我第一次尝试登录时,过程如下:它创建了会话文件,我将用户重定向到某个页面,该页面在服务器上执行另一个请求,它只是创建了另一个与PHPSSID完全不同的会话文件,当然,应用程序会将我注销。这就是奇怪的部分。
但后来,我尝试再次正常登录,它会让我登录,很好。每个请求都有相同的ID,session_regenerate_ID()工作正常,一切正常,PHPSSID与创建的会话文件匹配。
但是,如果我注销,关闭那个选项卡,打开一个新的选项卡并尝试登录(或者只是关闭选项卡而不注销),它只会做同样的事情:让我登录,创建一个会话文件,但随后,它再次更改de-session_id并将我踢出。
我真的很纠结。不能确定这是否是因为PHP<5.4或其他任何内容。
注意事项:-session_regenerate_id()在登录时使用,在检查是否有会话时使用(然后更新时间和regenerateId),在注销时使用。
- cfgsession.php在需要使用会话变量的每个页面上都需要一次
我需要一些线索。我已经看过很多话题,但没有一个内容丰富或接近解决这种奇怪行为。提前谢谢。
SessionHandlerInterface类仅适用于5.4.0或更高版本。您的代码适用于PHP 5.4.0及以上版本。它肯定会给带来奇怪的东西
如何记录coockie会话时间可以通过编程方式设置为会话的lifetime?也许你需要设置会话cookie选项
session_set_cookie_params(3600);
http://php.net/manual/en/function.session-set-cookie-params.php
刚刚添加:
ini_set('session.use_cookies', 1);
问题是:我没有在我的localweb上使用它,但我读到默认值是1(true),而且在我的实时服务器上,它可能被设置为0。现在它正常工作。谢谢