在页面不活动30秒后,在php中自动刷新页面并销毁会话,而无需任何用户交互?

在页面不活动30秒后,在php中自动刷新页面并销毁会话,而无需任何用户交互?,php,session,page-refresh,Php,Session,Page Refresh,当用户在页面不活动30秒后按refresh时,这段代码非常有效,但我需要一些代码来自动销毁sassion并在页面不活动30秒后刷新页面 <?php $inactive = 30; ini_set('session.gc_maxlifetime', $inactive); session_start(); if (isset($_SESSION['testing']) && time() - $_SESSION['testing'] &g

当用户在页面不活动30秒后按refresh时,这段代码非常有效,但我需要一些代码来自动销毁sassion并在页面不活动30秒后刷新页面

  <?php
    $inactive = 30;
    ini_set('session.gc_maxlifetime', $inactive);
    session_start();

    if (isset($_SESSION['testing']) && time() - $_SESSION['testing'] > $inactive) {
        session_unset();     // unset $_SESSION variable for this page
        session_destroy();   // destroy session data
     echo "<br><br>Sorry, you can't go any further!!!";
     echo "<br>Please log in.";
     echo "<br/><a href='index.php'>Go back to login page</a>";
    }else{
    //Here is some code to do when the session is still active
    }

    $_SESSION['testing'] = time();
    ?>

根据您希望通知用户的方式,有几种方法可以实现这一点-如果您只是希望在时间到期后重新加载页面-这将起作用:

<meta http-equiv="refresh" content="30" >
在你的函数中,你可以放任何你想要的东西——你很可能想要改变页面而不是刷新页面的东西

无论哪种方式,页面都会被javascript刷新,这意味着您的PHP代码可以执行。您应该使用PHP销毁会话

如果您愿意,您可以通过调用一个AJAX请求来实现这一点,该请求将命中一个设计用于破坏会话的页面——不管它看起来如何,基于您的代码——这是不需要的——但是使用AJAX的方法意味着用户的页面不需要刷新——逻辑如下:

1页面上有一些javascript代码,这些代码在时间限制到期后调用函数。请参见上面的代码-该函数然后向另一个页面发出AJAX请求 2另一个页面使php会话无效 3呼叫页面向用户显示某种错误/消息,说明他们已超时

然而,如果你想在真正的用户不活动后超时,你需要这样做:,但是我不相信这些解决方案在100%的防愚能力下,例如,它们在移动设备上会完全崩溃

现在-如果你想使用上面的链接-你需要ajax-因为你当前的代码不起作用-基本上,我不打算在这里给你写ajax教程-你需要使用javascript来计算你的超时时间,使用上面的SO链接,然后点击服务器,告诉它使会话无效阅读本教程更多信息


注意,当用户没有通过ajax使会话无效,而是刷新页面时,您需要决定该怎么做——也就是说,用户可以阻止来自其浏览器的所有ajax请求——这意味着即使会话处于非活动状态,他们也不会使会话自失效——但是,您可能希望服务器在3分钟后使会话超时还是什么?这些都是应用程序设计方面的东西。

根据您希望用户收到通知的方式,有几种方法可以实现这一点-如果您只是希望在时间到期后重新加载页面-这将起作用:

<meta http-equiv="refresh" content="30" >
在你的函数中,你可以放任何你想要的东西——你很可能想要改变页面而不是刷新页面的东西

无论哪种方式,页面都会被javascript刷新,这意味着您的PHP代码可以执行。您应该使用PHP销毁会话

如果您愿意,您可以通过调用一个AJAX请求来实现这一点,该请求将命中一个设计用于破坏会话的页面——不管它看起来如何,基于您的代码——这是不需要的——但是使用AJAX的方法意味着用户的页面不需要刷新——逻辑如下:

1页面上有一些javascript代码,这些代码在时间限制到期后调用函数。请参见上面的代码-该函数然后向另一个页面发出AJAX请求 2另一个页面使php会话无效 3呼叫页面向用户显示某种错误/消息,说明他们已超时

然而,如果你想在真正的用户不活动后超时,你需要这样做:,但是我不相信这些解决方案在100%的防愚能力下,例如,它们在移动设备上会完全崩溃

现在-如果你想使用上面的链接-你需要ajax-因为你当前的代码不起作用-基本上,我不打算在这里给你写ajax教程-你需要使用javascript来计算你的超时时间,使用上面的SO链接,然后点击服务器,告诉它使会话无效阅读本教程更多信息


注意,当用户没有通过ajax使会话无效,而是刷新页面时,您需要决定该怎么做——也就是说,用户可以阻止来自其浏览器的所有ajax请求——这意味着即使会话处于非活动状态,他们也不会使会话自失效——但是,您可能希望服务器在3分钟后使会话超时还是什么?这都是应用程序设计的东西。

你可以使用js setTimeout'windows.location=index.php',30000,但我知道js这对我来说不起作用,因为即使我点击页面或滚动页面,或者鼠标移动或在输入字段上键入,这个函数也会运行。当用户停止交互并离开鼠标和键盘时,我需要开始计算时间。如果鼠标停止设置开始计数,您可以在文档上使用事件mousemove。这是我想要的更好更接近的答案,但我需要一些键盘事件tooe.x。如果用户在

输入字段如果停止键盘输入就按下计时器开始计数的按钮,如何实现将鼠标和键盘的事件输入到代码中?对不起,我不太懂java脚本和英语,但是。键盘存在事件keydown和keyup您可以使用js setTimeout'windows.location=index.php',30000但我不知道js这对我来说不起作用,因为即使我单击页面或滚动页面,或鼠标移动或在输入字段上键入,此功能仍将运行。当用户停止交互并离开鼠标和键盘时,我需要开始计算时间。如果鼠标停止设置开始计数,您可以在文档上使用事件mousemove。这是我想要的更好更接近的答案,但我需要一些键盘事件tooe.x。如果用户在输入字段中键入内容,如果停止键盘键入,按下按钮开始计时,如何将鼠标和键盘的事件实现到代码中?对不起,我不太懂java脚本和英语,但是。键盘存在事件keydown和KeyUp这对我来说不起作用,因为即使我单击页面或滚动页面,或者移动鼠标或在输入字段上键入内容,此功能仍将运行。我需要开始计算用户停止交互并远离鼠标和键盘的时间。我已经将您链接到另一个SO帖子,该帖子正好解决了您的问题-上面有jquery和非jquery的答案。注意-这有更多的设计问题,您需要使用ajax来实现最佳结果,如果这是唯一可能的可靠解决方案来处理此类问题的事件,那么我将尝试使用ajax。我想这会更容易做到,但无论如何,谢谢你详尽的回答!我在那篇文章中用ajax解决了这个问题,这对我来说非常适合,但只需要为jquery库添加源代码:这对我来说不起作用,因为即使我点击页面或滚动页面,或者鼠标移动或在输入字段上键入,这个函数也会运行。我需要开始计算用户停止交互并远离鼠标和键盘的时间。我已经将您链接到另一个SO帖子,该帖子正好解决了您的问题-上面有jquery和非jquery的答案。注意-这有更多的设计问题,您需要使用ajax来实现最佳结果,如果这是唯一可能的可靠解决方案来处理此类问题的事件,那么我将尝试使用ajax。我想这会更容易做到,但无论如何,谢谢你详尽的回答!我在那篇文章中用ajax解决了这个问题,它完全符合我的需要,但只需为jquery库添加源代码: