会话变量已设置

时间:2012-01-02 04:58:51

标签: php session

我有一个'loginStatus'会话变量,它在第一页加载时设置。当第一次设置'loginStatus'时,我有一个if / else首次回复'设置'对浏览器的评论。 '第一次'设置'永远不会出现!我已经清除了缓存,我已经尝试在我的Netbeans开发环境之外的浏览器窗口中导航到index.php页面 - 无关紧要。就好像会话在我的localhost Web服务器上永久保持活跃状态​​。

这是第一次加载页面时检测未初始化的“loginStatus”会话变量的代码,并且只创建/初始化会话变量一次。

if ( isset($_SESSION['loginStatus']))
{
    // we get here ONLY if the 'loginStatus' session variable has already been
    // created for this user's session.  
    $_SESSION['loginStatus'] = "loginStatus already set!"; 
    echo '<br />Just set the loginStatus to: ' .  $_SESSION['loginStatus'] . '<br /><br />';    
}
else
{
    // we only get here the first time this is sent by the server
    // to the user's browser -- so we need to create the 'loginStatus' session
    // variable because the user just came to our site
    // and has not yet logged in. 
    $_SESSION['loginStatus'] = "First-time initialization of loginStatus"; 
    echo '<br />Just set the loginStatus for the first time!<br /><br />';
}

从不在浏览器窗口中看到“只是第一次设置loginStatus!”

我在浏览器窗口中看到的只是:“只需将loginStatus设置为:loginStatus已设置!”

换句话说 - 首次加载页面时,isset()错误地返回 true
当我第一次在浏览器中加载页面时,我认为没有理由认为已经存在神奇的会话变量!

虽然我在编写代码时已经多次加载了上面的页面,但我理解当你离开最后一页时会话被破坏了。那么,为什么我的$ _SESSION ['loginStatus']变量像一个已经破旧的亲戚一样闲逛呢?

2 个答案:

答案 0 :(得分:1)

会话在php.ini文件中通过设置规则(到会话GC)时被破坏。当您关闭浏览器或浏览其他页面时,这不一定会发生。 阅读php.net中的会话手册,并将会话规则设置为适合您的最佳方式。

例如,在高安全性站点上,我会给会话一段时间。意味着,如果用户没有在该时间限制内向服务器发出请求的操作,则会话将过期。

答案 1 :(得分:-1)

不确定, 但可能是因为您已将此值保存在Cookie中,

尝试清除Cookie,然后重新加载页面