【问题标题】:How do I alert admin users when their account has timed out我如何在管理员用户的帐户超时时提醒他们
【发布时间】:2013-12-04 22:26:26
【问题描述】:

我编写的网站是一份高中报纸。最近,管理页面一直有一个趋势问题。当用户创建文章时,由于设定的时间限制,他们已经注销。我想在警报中编程以告诉用户他们已注销,以便他们可以复制他们的文章并将其粘贴回原处。这是我们的超时代码:

    // Kill Session if session end exists.
    if ($_GET['endsession']) {
        unset($_SESSION['name']);
        unset($_SESSION['access']);
        unset($_COOKIE['username']);
        setcookie("username","",time() - 3600);
        session_destroy();
        header("Location: http://" . $_SERVER['HTTP_HOST'] . "/admin.php");
    }

我尝试在 [ session_destroy(); 下放置一个 javascript 警报。 ] 及以上 [ setcookie("username","",time() - 3600); ],但这并没有发生任何事情。我还尝试将它放在 [ session_destroy(); ],但这使得页面甚至没有人超时。

当函数 [ session_destroy(); 运行时,如何获得一个简单的 Javascript 警报? ] 运行?

【问题讨论】:

  • 在 session_destroy 下放置一个 js 警报是没有意义的。如果它在标头调用之前,它将杀死标头。如果它在之后,它可能永远不会显示,因为浏览器无论如何都会加载下一页。
  • 是否可以在浏览器窗口打开时保持会话活动?我认为最好在有人处理文章时防止会话超时,而不是告诉用户他的工作丢失

标签: javascript php session alert logout


【解决方案1】:

您如何检查 - 在取消会话之前 - 如果还有,比如说,还剩 5 分钟?

if($_GET['endsession'] < time() + 5*60) {
    //alert the user
}

if($_GET['endsession']) {
    //your code to unset the session
}

假设$_GET['endsession'] 包含一个时间戳。如果不是这种情况,您也可以对其进行改造或其他任何方式,但我认为总体思路很清楚。

【讨论】:

    【解决方案2】:

    也许在你的身体标签中:

    <body onload="window.setTimeout(function() {window.alert('You have been logged out');},600000);">
    

    这将在 10 分钟(600 秒 / 600,000 毫秒)后在浏览器中显示“您已注销”的警报。

    你也可以在body中做同样的效果:

    <script>window.setTimeout(function() {window.alert('You have been logged out');},600000);</script>
    

    http://www.w3schools.com/jsref/met_win_settimeout.asp

    【讨论】:

    • 这不起作用。它是一个 php 文件并将其更改为 html 与主要登录功能相混淆。此外,如果该方法确实有效,那么用户会在他们到达页面后计时,而不是在他们登录后计时。此外,我确实尝试在 php 文件中添加它,但这不起作用。
    • 是的,您必须将代码添加到页面的 HTML 部分(添加到您的 body 标签,只需将“onload=...”添加到现有标签,或添加第二个脚本这页纸)。登录通常是从上次活动开始计时(距离上次页面请求 10 分钟),而不是从他们登录的时间开始。您可能需要仔细检查一下,因为这种超时确实很少见。
    • PHP 代码必须在&lt;?php?&gt; 标签之间。 HTML 可以出现在大多数页面的任何位置(但只允许使用一个 &lt;body&gt; 标记)。 &lt;body&gt;&lt;/body&gt; 标记之间的 Javascript 会立即执行,因此将第二个脚本放在我的答案中 body 标记之间的任何位置都会产生超时警报。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多