Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当用户不执行注销操作而离开应用程序时自动注销_Php_Session_Logout - Fatal编程技术网

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

Php 当用户不执行注销操作而离开应用程序时自动注销,php,session,logout,Php,Session,Logout,有时,用户没有单击注销按钮就离开应用程序,或者关闭或休眠其计算机,甚至关闭与应用程序域相关的所有会话(页面)。因此服务器无法知道用户已注销!在我们的例子中,我们有一个“上次会话花费的时间”参数来检查每个用户激活的上次会话的时间 我们需要在用户离开应用程序时自动注销,而不执行注销操作! 有没有一个过程可以做到这一点?你可以做一些类似的事情 一旦用户登录到您的站点,设置一个会话 $\u会话['last\u activity\u recorded']=time() 这将跟踪用户的活动 在每页上,将此会

有时,用户没有单击注销按钮就离开应用程序,或者关闭或休眠其计算机,甚至关闭与应用程序域相关的所有会话(页面)。因此服务器无法知道用户已注销!在我们的例子中,我们有一个“上次会话花费的时间”参数来检查每个用户激活的上次会话的时间

我们需要在用户离开应用程序时自动注销,而不执行注销操作!
有没有一个过程可以做到这一点?

你可以做一些类似的事情

  • 一旦用户登录到您的站点,设置一个
    会话

    $\u会话['last\u activity\u recorded']=time()

    这将跟踪用户的活动

  • 在每页上,将此
    会话更新为更新时间(即当前时间)

  • 检查用户是否处于非活动状态(此处为30分钟),并采取必要步骤取消登录凭据(在更新每页顶部的
    会话之前)

    if($_SESSION['last_activity_recorded']

  • 试试这个:

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

    如果
    $\u SESSION['LAST\u ACTIVITY']>600
    在过去600秒(10分钟)内没有任何活动,则销毁会话。

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

    登录

  • 创建了一个会话,可以在第一次点击时从PHP检索会话id(尚未登录)
  • 如果用户进行身份验证,则将会话\u id保存到DB,并将当前时间戳作为最后一次\u签入
  • 然后,您可以让所有用户在每个页面请求时执行过时会话检查:

    页面查询

  • 从上次签入时间超过10分钟的所有用户中删除会话id
  • 检查我的当前会话\u id是否=db.session\u id
  • 如果会话不匹配,请注销并将用户发送到login.php
  • 如果会话id匹配,则更新上次签入

  • 好的,但是如何通知服务器,即:如果用户没有调用页面,我们如何设置注销时间的值?好的,这很好,很清楚,但是在关闭窗口或关闭后,我们如何通知数据库注销时间,。。。???如果不再调用应用程序的任何页面?