Session_id 行为怪异

Session_id behaving weirdly

所以我有 SessionHandler class,我的另一个文件像这样启动它 (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();

好吧,小区别是在我的 localweb 中我使用:

session_set_save_handler($sessao) 

因为在我的localweb中,它实际上是PHP > 5.5.

它在我的 localweb 上工作得很好,我刷新页面,注销,登录,关闭选项卡,打开选项卡,再次登录,一切正常,我浏览器的 PHPSESSID 是等于在会话文件上创建的等等。

编辑:我有一个 PHP < 5.4 的服务器,事实上,我使用上面的代码,意味着 PHP < 5.4,但它仍然表现得很奇怪。刷新浏览器,它会创建另一个会话文件,但不会更改 PHPSESSID。我第一次尝试登录时,过程是这样的:它创建会话文件,我将用户重定向到某个页面,该页面在服务器上执行另一个请求,它只是创建另一个与 [=54= 完全不同的会话文件]SESSID,当然,该应用程序将我注销。这就是奇怪的部分。

但是,我尝试再次正常登录,它让我登录,一切正常。每个请求都有相同的 ID,session_regenerate_id() 工作正常,一切正常,PHPSESSID 与创建的会话文件相匹配。

但是,如果我注销,关闭那个选项卡,打开一个新选项卡并尝试登录(或者只是关闭选项卡而不注销)它只是做同样的事情:让我登录,创建一个会话文件,但随后,它再次更改 de session_id 并将我踢出局。

我真的卡在这上面了。不能确定这是否因为 PHP < 5.4 或其他任何原因而发生。

备注: - session_regenerate_id() 被使用登录检查是否有会话(然后更新时间和regenerateId)和注销时.

我需要对此有所了解。我已经看过很多主题,但是 none 非常有用或接近于解决这种奇怪的行为。提前致谢。

SessionHandlerInterface class 仅适用于 5.4.0 或更高版本。您的代码适用于 PHP 版本 5.4.0 及更高版本。它肯定会给出奇怪的东西

如何以编程方式记录 cookie 会话时间 set_lifetime? 也许您需要设置会话 cookie 选项

session_set_cookie_params(3600);

http://php.net/manual/en/function.session-set-cookie-params.php

刚刚添加:

ini_set('session.use_cookies', 1);

问题是:我没有在我的本地网络上使用它,但我读到默认值为 1(真),并且可能在我的实时服务器上,它被设置为 0。现在它可以正常工作了。谢谢