PHP中的会话值不会过期
Posted
技术标签:
【中文标题】PHP中的会话值不会过期【英文标题】:Session value in PHP not expiring 【发布时间】:2015-04-13 06:22:30 【问题描述】:我已将两个会话变量设置为:
$_SESSION['logged_in'] = 1;
$_SESSION['last_acted_on'] = time();
我正在尝试重置会话变量 logged_in
的值:
<?php
session_start();
if( isset($_SESSION['last_acted_on']) && (time() - $_SESSION['last_acted_on'] > 120) ) //2mins
session_unset('last_acted_on'); // unset $_SESSION variable for the run-time
session_unset('logged_in');
session_unset();
unset($_SESSION['last_acted_on']);
unset($_SESSION['logged_in']);
session_destroy(); // destroy session data in storage
return;
else
$_SESSION['last_acted_on'] = time();
?>
但是没有效果,logged_in
保持为 1。有什么建议吗?
EDIT
:我已将我的代码更新为:
if( isset($_SESSION['last_acted_on']) && (time() - strtotime($_SESSION['last_acted_on']) > 120) ) //2mins
unset($_SESSION['last_acted_on']); // unset $_SESSION variable for the run-time
unset($_SESSION['logged_in']);
session_unset();
session_destroy(); // destroy session data in storage
return;
$_SESSION['last_acted_on'] = time();
此外,当我刷新页面或在页面上来回导航时,会话值未设置。为什么在 2 分钟的时间段后没有取消设置?请注意,会话变量到期的页面刷新正在调用 unsetsession.php 文件。
【问题讨论】:
尝试将time() - $_SESSION['last_acted_on']
更改为time() - strtotime($_SESSION['last_acted_on'])
为什么要在 else 情况下更新 $_SESSION['last_acted_on'] ?
@Marcus 它没有任何区别。仍然无法取消设置会话变量。请查看问题中的Edit
是的,我的错。我只是确保变量的值是有效的时间戳。正如其他人所说,您的会话中存在问题。我也会更新我的答案。
【参考方案1】:
我认为取消设置会话变量存在问题。如果您打算刷新会话本身,您可以使用session_destroy()
,这将清除$_SESSION
数组。否则,您可以使用unset()
函数,如here 所述。
注意:如果 $_SESSION(或 PHP 4.0.6 或更低版本的 $HTTP_SESSION_VARS)是 使用,使用 unset() 取消注册会话变量,即 unset ($_SESSION['varname']);.
或者更简单,您可以简单地将它们的值设置为null
或0
,然后您可以检查它们的empty
条件,如下所示:
<?php
session_start();
$session = &$_SESSION;
if( !empty($session['last_acted_on']) && (time() - $session['last_acted_on'] > 120) ) //2mins
unset($session['last_acted_on']); // unset $_SESSION variable for the run-time
unset($session['logged_in']);
return;
else
$session['last_acted_on'] = time();
【讨论】:
$_SESSION['last_acted_on'] = time()
- 该值已经是一个整数时间戳!
已更新。如果它仍然无效,请告诉我【参考方案2】:
session_unset 的错误用法。
void session_unset ( void )
你需要的是
unset($_SESSION['yourvalue'])
【讨论】:
以上是关于PHP中的会话值不会过期的主要内容,如果未能解决你的问题,请参考以下文章