【问题标题】:PHP session destroy is not working properlyPHP会话销毁无法正常工作
【发布时间】:2018-12-24 16:33:27
【问题描述】:

我有一个有效期为 1 小时的用户登录。我的意思是用户可以登录系统,他可以继续做他的工作。我不会检查非活动时间。我从用户成功登录的过程一开始就开始计算。无论用户做什么,我都会缓存操作并销毁会话,并在登录后每隔 1 小时直接进入登录部分。

当用户成功登录后,我以下列方式将时间戳设置为$_SESSION 变量。 $_SESSION['key_set_time'] = time();.

以下是SESSION DESTROY代码。

$_SESSION['key_set_time'] = time();
$session_duration = 3600;
$current_time = time();
if(((time() - $_SESSION['key_set_time']) > $session_duration)){
    session_destroy();
}else{
    header('LOCATION:/login.php');
}

在调试时我发现$_SESSION['key_set_time'] = time(); 设置了每次页面重新加载的当前时间。它替换了用户登录的时间。所以我无法DESTROY会话。如何防止每次重新加载页面时更换时间? (这个过程必须在 BACKEND ITSELF 中完成。这个菜鸟笔记是因为 stackoverflow 的答案是要销毁 SESSION MANUALLY。)

【问题讨论】:

  • $_SESSION['key_set_time'] = 空($_SESSION['key_set_time'])?时间():$_SESSION['key_set_time'];
  • 可能是this帮助
  • 这听起来不错。但它仍然在页面刷新中返回当前时间戳。这是由浏览器cookie完成的吗?我不知道这是怎么回事。
  • @EmptyBrain 它没有帮助。它会在每次重新加载时重置会话。
  • 把它放在一个函数中。随时调用。

标签: php session session-variables session-cookies session-state


【解决方案1】:
if (!isset($_SESSION['key_set_time'])) {
$_SESSION['key_set_time'] = time();
} else if (time() - $_SESSION['key_set_time'] > 3600) {
   // session started more than 1 hour ago
   session_regenerate_id(true);    // change session ID for the current session
   $_SESSION['key_set_time'] = time();  // update creation time
}

这应该适用于您的情况。如果没有,请告诉我。

您可以根据需要更改else if 声明

【讨论】:

  • 很高兴我能帮上忙
  • 这几行我几乎浪费了两个弱点。
猜你喜欢
  • 2023-03-19
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2012-05-25
  • 2011-11-06
相关资源
最近更新 更多