【发布时间】:2014-05-25 11:00:32
【问题描述】:
有时,用户在没有单击注销按钮的情况下离开应用程序,或者关闭或休眠其机器,甚至关闭与应用程序域相关的所有会话(页面)。所以服务器无法知道用户已注销!在我们的例子中,我们有一个“上次会话所花费的时间”参数来检查为每个用户激活的上次会话的时间。
我们需要在用户离开应用程序时自动注销用户而不执行注销操作! 有流程怎么做吗?
【问题讨论】:
有时,用户在没有单击注销按钮的情况下离开应用程序,或者关闭或休眠其机器,甚至关闭与应用程序域相关的所有会话(页面)。所以服务器无法知道用户已注销!在我们的例子中,我们有一个“上次会话所花费的时间”参数来检查为每个用户激活的上次会话的时间。
我们需要在用户离开应用程序时自动注销用户而不执行注销操作! 有流程怎么做吗?
【问题讨论】:
您可以在服务器上设置一个 cron 作业来检查陈旧的会话但这不是一个很好的解决方案,因为您必须为您的项目部署另一个解决方案(cron 作业)。 我这样做的方法是在您的项目中包含一个 check_credentials.php 文件,该文件在您的数据库连接后立即运行,然后您将在您的用户表中为您的项目用户添加两个字段:session_id 和last_checkin。 该过程将像这样进行:
登录:
然后您可以让所有用户在每次页面请求时都进行过期会话检查:
页面查询:
【讨论】:
试试这个:
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 600)) {
session_unset();
session_destroy();
}
$_SESSION['LAST_ACTIVITY'] = time();
如果$_SESSION['LAST_ACTIVITY'] > 600 在过去 600 秒(10 分钟)内没有活动,则销毁会话。
【讨论】:
你可以做类似的事情,
在用户登录您的站点后设置session。
$_SESSION['last_activity_recorded'] = time();
这将跟踪用户的活动
在每个页面上将session 更新为更新时间(即当前时间)
检查用户是否不活动(此处为 30 分钟)并采取必要步骤取消设置登录凭据(在更新每个页面顶部的 session 之前)
if($_SESSION['last_activity_recorded'] < time()+30*60){ session_unset();
session_destroy(); }
【讨论】: