2015-12-17 248 views
0

所以我有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需要一次每一页需要使用会话变量上。

我需要一些这方面的信息。我已经看到很多主题,但没有很多信息或接近解决这种奇怪的行为。提前致谢。

回答

0

只是说:

ini_set('session.use_cookies', 1); 

的事情是:我没有使用它在我的localweb,但我读了默认是1(真),并且可能在我的实时服务器上设置为0.现在它正常工作。谢谢。

1

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

+0

我编辑帖子,看看我是否更清楚,我认为它错过了信息。但事情是:我使用的服务器的PHP不到5.4,我使用上面的代码在PHP中使用少于5.4,好吗?但它仍然很怪异。 –

+0

该功能不适用于5.4以下的php,如果功能不可用,那么你如何使用它..... – Vineet1982

0

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

session_set_cookie_params(3600); 

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

+0

那么,你的回答让我意识到一件事:“ini_set('session.use_cookies',1); ”。我没有在PHP大于5.4的服务器上使用它,但是这条线解决了我的问题。谢谢你的帮助我潜意识嘿嘿。 –