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']);.

或者更简单,您可以简单地将它们的值设置为null0,然后您可以检查它们的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中的会话值不会过期的主要内容,如果未能解决你的问题,请参考以下文章

如何使 PHP 中的用户会话过期?

为啥在会话过期之前过期的@ViewScoped bean 不会被销毁

PHP会话控制之失效时间与过期回收机制

使用 AJAX 检查 PHP 会话是不是存在或过期

PHP 会话过期 - 它啥时候刷新?

Tomcat 会话 cookie 不会过期