Session_id表现得很奇怪

时间:2015-12-17 12:27:53

标签: php session session-set-save-handler

所以我有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) 

因为,在我的本地网站中,它实际上是PHP&gt; 5.5。

它在我的本地网上运行得非常好,我刷新页面,注销,登录,关闭标签,打开标签,再次登录,一切正常,我的浏览器中的PHPSESSID等于会话中创建的PHPSESSID文件等等。

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

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

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

我真的坚持这个。由于PHP&lt;而不能确定是否会发生这种情况5.4或其他任何内容。

注意: - session_regenerate_id()正在登录正在检查,如果有会话(然后更新时间和regenerateId),登出。< / p>

  • cfg_session.php需要一次每页,需要使用会话变量。

我需要对此有所了解。我已经看过很多主题,但没有一个信息丰富或接近解决这个奇怪的行为。提前谢谢。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如何记录coockie会话时间可能是会话programmaticaly的set_lifetime? 也许你需要设置会话cookie选项

session_set_cookie_params(3600);

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

答案 2 :(得分:0)

刚补充说:

ini_set('session.use_cookies', 1);

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