【问题标题】:How to logout user when $_SESSION variable expires$_SESSION 变量过期时如何注销用户
【发布时间】:2017-04-04 22:19:07
【问题描述】:

我正在尝试实现一个 MySQL 表,其中包含当前登录的用户列表。这是我当前的实现逻辑和代码。

在登录时执行以下代码:

//Add the user_id to the logged_in table
$loggedInQry = mysqli_query($dbc, "INSERT INTO logged_in (user_id) VALUES ('$userId')");

点击退出按钮后,执行以下代码:

//Remove user from logged_in table.
$userId = $_SESSION['userId'];
$logoutQry = mysqli_query($dbc, "DELETE FROM logged_in WHERE user_id = '$userId'");

//Clear all of the saved session variables.
session_destroy();

然而,我目前面临的问题是,如果会话在默认 24 分钟后超时,则由于未设置 $_SESSION['userId'] 变量,用户会自动注销,但是 user_id 不会从登录表。

有没有一种方法可以在$_SESSION 超时时执行函数?理想情况下,我想在 Session 超时时从 logged_in 表中删除当前的 $_SESSION['userId'],因为它当前保留在 logged_in 表中。

【问题讨论】:

  • 为什么不给会话一个生命周期,只在用户请求时才终止它?
  • 验证注销请求是来自用户的有效请求也很重要。

标签: php html mysql session


【解决方案1】:

您需要实现自己的会话超时机制,以便在超时时执行相同的删除查询。

这会让你朝着正确的方向前进:https://solutionfactor.net/blog/2014/02/08/implementing-session-timeout-with-php/

【讨论】:

  • 如果您可以将该链接的重要部分作为答案的一部分发布然后引用该链接,那么您的答案可能会更有用,目前如果该链接更改/被删除,您的答案将失去价值
【解决方案2】:

自动过期会话

<?php
session_start();
$idletime=30;//after 60 seconds the user gets logged out
if (time()-$_SESSION['timestamp']>$idletime){
session_destroy();
}else{
$_SESSION['timestamp']=time();
}

$_SESSION['timestamp']=time();

【讨论】:

  • 60 秒是一分钟
猜你喜欢
  • 1970-01-01
  • 2013-03-08
  • 2020-03-06
  • 2020-09-11
  • 2018-07-30
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 2012-01-23
相关资源
最近更新 更多