用户离开应用程序而不执行注销操作时自动注销

时间:2014-04-11 10:29:03

标签: php session logout

有时,用户在不点击退出按钮的情况下离开应用程序,或关闭或休眠其机器,甚至关闭与应用程序域相关的所有会话(页面)。所以服务器无法知道用户已经注销了!如果我们的情况,我们有“在上次会话上花费的时间”参数来检查为每个用户激活的上次会话的时间。

我们需要在离开应用程序时自动注销用户而不执行注销操作! 有什么过程吗?

提前谢谢。

3 个答案:

答案 0 :(得分:1)

您可以在服务器上设置cron作业以检查过时的会话但是这不是一个很好的解决方案,因为您必须在项目中部署另一个解决方案(cron作业)。 我这样做的方法是在项目中包含一个check_credentials.php文件,该文件在数据库连接后立即运行,然后在用户表中为项目用户添加两个字段: session_id AND的 last_checkin 即可。 这个过程将如下工作:

登录

  1. 创建会话,并在首次点击时从PHP检索session_id(尚未登录)
  2. 如果用户进行身份验证,则将session_id保存到DB,并将当前时间戳保存为last_checkin
  3. 然后,您可以让所有用户在每个页面请求中进行陈旧的会话检查:

    页面查询

    1. 从last_checkin超过10分钟的所有用户中删除session_id。
    2. 检查我当前的session_id = db.session_id
    3. 如果会话不匹配退出并将用户发送到login.php
    4. 如果session_id匹配,则更新last_checkin

答案 1 :(得分:0)

你可以做点什么,

  1. 用户登录您的网站后设置session

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

    这会跟踪用户的活动

  2. 在每个页面上将此session更新为更新时间(即当前时间)

  3. 检查用户是否不活动(此处为30分钟)并采取必要步骤取消设置登录凭据(在更新每页顶部的session之前)

    if($_SESSION['last_activity_recorded'] < time()+30*60){ session_unset(); session_destroy(); }

答案 2 :(得分:0)

试试这个:

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 600)) {
    session_unset();
    session_destroy();
}
$_SESSION['LAST_ACTIVITY'] = time();

如果$_SESSION['LAST_ACTIVITY'] > 600在最后600秒(10分钟)内没有活动,则销毁会话。