Php 会话变量已设置

Php 会话变量已设置,php,session,Php,Session,我有一个“loginStatus”会话变量,它在第一页加载时设置。当首次设置此“登录状态”时,我有一个if/else将“首次设置”注释回显到浏览器。“首次设置”从未出现!我已经清除了缓存,我尝试在我的Netbeans开发环境之外的浏览器窗口中导航到index.php页面——这没关系。这就好像会话在本地主机web服务器上永久保持活动状态一样 下面是第一次加载页面时检测未初始化的“loginStatus”会话变量的代码,并仅创建/初始化一次会话变量 if ( isset($_SESSION['log

我有一个“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 />';
}
if(isset($\u会话['loginStatus']))
{
//只有在“loginStatus”会话变量已被调用时,我们才能到达这里
//已为此用户的会话创建。
$\会话['loginStatus']=“loginStatus已设置!”;
echo'
只需将登录状态设置为:'.$\u会话['loginStatus'].

; } 其他的 { //我们只有在服务器第一次发送时才到达这里 //到用户的浏览器——因此我们需要创建“loginStatus”会话 //变量,因为用户刚刚来到我们的站点 //尚未登录。 $\会话['loginStatus']=“首次初始化loginStatus”; echo'
第一次设置登录状态!

; }
I从不在浏览器窗口中看到“首次设置登录状态!”

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

换句话说——在我的页面第一次加载时,isset()错误地返回了true
当我第一次在浏览器中加载页面时,会话变量神奇地已经存在,我看不出有任何理由


虽然我今晚在编写代码时已经多次加载了上面的页面,但据我所知,当您离开最后一页时,会话将被破坏。那么,为什么我的$_SESSION['loginStatus']变量像一个受欢迎的亲戚一样挂在那里?

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


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

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

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

不确定, 但这可能是因为您已将这些值保存在cookie中

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

不确定, 但这可能是因为您已将这些值保存在cookie中


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

false。会话数据保存在服务器上,永远不会在cookie中发送。PHP会话cookie仅包含会话名称/ID密钥对。false。会话数据保存在服务器上,永远不会在cookie中发送。PHP会话cookie只包含会话名称/ID密钥对。
var\u dump($\u session)
在页面顶部,查看它包含的内容,然后从那里开始工作。@Kenaniah--我这样做了,看到了:数组'loginStatus'=>string'loginStatus已经设置(长度=24)执行一个
session_unset();会话_destroy()以清除服务器端的浏览器会话。对,但在我的代码中,哪里是添加该会话的正确位置?在php中是否存在可以检测到的事件或内容,以便我知道用户何时关闭了我网站上的所有页面——因为不知道何时发生,我无法在任意时间使用session_unset()、session_destroy()。当用户离开我的网站,关闭所有页面时,必须执行此操作。您可以在注销页面上擦除会话。除非用户实际单击注销,否则会话仍将存在。除此之外,会话可能会在过期后通过PHP的会话垃圾收集进行清理,或者在用户清除会话数据时与浏览器解除关联。
var\u dump($\u session)
在页面顶部,查看它包含的内容,然后从那里开始工作。@Kenaniah——我这样做了,看到了:数组'loginStatus'=>string'loginStatus已经设置(长度=24)执行一个
session_unset();会话_destroy()以清除服务器端的浏览器会话。对,但在我的代码中,哪里是添加该会话的正确位置?在php中是否存在可以检测到的事件或内容,以便我知道用户何时关闭了我网站上的所有页面——因为不知道何时发生,我无法在任意时间使用session_unset()、session_destroy()。当用户离开我的网站,关闭所有页面时,必须执行此操作。您可以在注销页面上擦除会话。除非用户实际单击注销,否则会话仍将存在。除此之外,会话可能会在过期后通过PHP的会话垃圾收集进行清理,或者在用户清除会话数据时与浏览器解除关联。那么,什么是“最佳实践”来确保在用户离开站点时删除会话数据,我指的是以编程方式响应,例如,“您的用户已关闭网站中的所有页面并将离开,是否需要进行任何清理?”我的网站的最后通知??通常的做法是什么?肯定有一个