带有警告的 PHP/Javascript 会话超时

Posted

技术标签:

【中文标题】带有警告的 PHP/Javascript 会话超时【英文标题】:PHP/Javascript Session Timeout with warning 【发布时间】:2012-07-17 08:05:03 【问题描述】:

有谁知道我可以在哪里阅读教程,或者知道如何创建一个内置警告的基于 javascript 的会话超时,以及可选的这些功能:

用户活动重置计时器 与数据库交互(最后一次看到等) 如果不活动,它将注销用户(通过重定向到 logout.php 页) 在注销用户之前,它会显示一条弹出消息,询问 如果他们想继续

很遗憾,我对 Javascript 不太了解。

【问题讨论】:

Javascript 完全是客户端的;如果您根据您的建议依赖任何数量的安全性,那么它无论如何都不安全。客户端代码不仅可编辑,还可以禁用。由于同样的原因,允许 javascript 直接与数据库通信也是非常不明智的。 我使用这个是在管理员登录之后。这段代码不会对公众开放,他们必须通过 PHP 登录并在数据库上才能登录。但是是是否有另一种更安全的超时功能替代方案? 【参考方案1】:

我不知道您的网站是如何完成的,但如果做得正确,您应该有一个登录会话和某种后端控制系统,如果前一个操作是在 X 分钟/小时前进行的,则该系统会拒绝任何操作,并且自动使用户过期。如果你想实现一些客户端代码,你应该有一个javascript计时器,当过期时间即将结束时提醒用户,你也可以在过期时间到达后将用户重定向到主页或登录页面。这样,所有的安全功能都在后端,而 javascript 仅作为显示行为的显示措施。

更新:

setInterval(function()alert("Hey, your session is ending"),360000);

setInterval(function()
    redirect();
,720000);

function redirect()
    document.location = "../logout.php"

更新2:

setInterval(function()
    logout();
,600000);

function logout()
    if(confirm('Logout?'))
        redirect();
    else
        alert('OK! keeping you logged in')


function redirect()
    document.location = "../logout.php"

带有此代码的每个页面都会在 10 分钟后询问用户是否要退出。这意味着您的会话不能自行过期,您必须将控制权留给用户

【讨论】:

我目前的问题是在哪里可以找到您刚才所说的代码……您基本上重复了我的问题…… 客户端还是服务器端?服务器端真的取决于你的实现。客户端正如我所说,使用javascript计时器:检查更新答案 @kdjernigan 是你要找的吗? 是的,除非有办法让他们有 2 个选项,继续会话并注销? 进展如何?完成后不要忘记关闭答案【参考方案2】:

5 分钟后退出会话

<script type="text/javascript">
        var interval;
         $(document).on('mousemove', function () 
             clearInterval(interval);
             var coutdown = 5 * 60, $timer = $('.timer'); // After 5 minutes session expired  (mouse button click code)
             $timer.text(coutdown);
             interval = setInterval(function () 
                 $timer.text(--coutdown);

                 if (coutdown === 0) 

                     alert("Session expired. User successfully logged out.");
                     window.location = "UserLogin.php";
                 

             , 1000);
         ).mousemove();

         var interval;
                     $(document).on('keydown', function () 
             clearInterval(interval);
             var coutdown =5 * 60, $timer = $('.timer'); // After 5 minutes session expired (keyboard button press code)
             $timer.text(coutdown);
             interval = setInterval(function () 
                 $timer.text(--coutdown);

                 if (coutdown === 0) 

                     alert("Session expired User successfully logout.");
                     window.location = "UserLogin.php";
                 

             , 1000);
         ).mousemove();
    <script>



         <html>
            <div class="timer">
                 Time of session display on page 
            </div>
        </html>

【讨论】:

这段代码是你写的吗?如果没有,链接将非常有帮助,因为 OP 正在寻找除了代码本身之外的更多解释,以便自己学习。 不,我的代码,这不是复制的@TamaMcGlinn

以上是关于带有警告的 PHP/Javascript 会话超时的主要内容,如果未能解决你的问题,请参考以下文章

如何在 shiro 中弹出一个屏幕来警告会话超时?

如何显示足够智能以处理多个打开的浏览器或选项卡的会话超时警告

如何使用JQuery和ColdFusion处理会话超时警告?

多个 Grails 应用程序会话超时问题

Hystrix 和 Ribbon 超时警告

使用 Spring Security Adapter 时的 Keycloak 会话超时行为