2012-01-02 211 views
0

我有一个'loginStatus'会话变量在第一次页面加载时被设置。当这个'loginStatus'第一次被设置时,我有一个if/else在浏览器中首次回显'设置'评论。 '第一次设置'永远不会出现!我清除了缓存,我尝试导航到Netbeans开发环境之外的浏览器窗口中的index.php页面 - 无关紧要。就好像会话永久保持在本地主机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()函数的返回错误真正的第一次我的页面加载!
当我第一次在浏览器中加载页面时,我看到了一个魔术般已经存在的会话变量的理由。

虽然今天晚上我在编写代码的时候多次加载了上述页面,但我的理解是,当您离开最终页面时,会话将被破坏。那么为什么我的$ _SESSION ['loginStatus']变量像一个已经受到欢迎的亲戚一样挂在身边呢?

+0

'的var_dump($ _ SESSION)'在你的页面的顶部,看看它包含什么,然后从那里工作。 – Kenaniah 2012-01-02 05:10:03

+0

@Kenaniah - 我这样做了,看到这个:array 'loginStatus'=>字符串'loginStatus已经设置!' (length = 24) – wantTheBest 2012-01-02 05:15:36

+0

做一个'session_unset(); session_destroy();'清除服务器端的浏览器会话。 – Kenaniah 2012-01-02 05:16:39

回答

1

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

例如,在高安全性的网站上,我给了会话几分钟的时间。意思是,如果用户在该时限内没有向服务器发出请求的操作,则该会话将过期。

+0

什么是'最佳实践',然后确保会话数据在用户离开网站时被删除,我的意思是**以编程方式**回应我的网站的最终通知'您的用户已关闭所有在你的网站的网页,并正在离开,做任何清理,你需要做'??通常的做法是什么?当然,有一种方法可以“捕捉”一个“事件”,或者当用户完成我的网站时,我可以通过某种方式摆脱不需要的会话变​​量! – wantTheBest 2012-01-02 05:19:42

+1

@wantTheBest:老兄,我不是一个巨魔。没有人关心过期的会议,但新手,相信我。你可以尽可能多地标记它:-)并且**没有任何保证“赶上”离开现场事件的方式 - 想象一下,如果客户刚刚拔掉了他的互联网电缆 – zerkms 2012-01-02 05:27:41

-1

不知道, 但它可能是因为你必须保存在你的cookies这个值,

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

+0

错误。会话数据保存在服务器上,永远不会在cookie中发送。一个PHP会话cookie包含** ONLY **会话名称/ ID密钥对。 – 2012-01-02 05:09:30