javascript - 处理多个选项卡上的 session

标签 javascript php session authentication

最近遇到这个问题。场景是,假设我打开了两个选项卡(A 和 B),我使用 Tab A 登录验证重定向到主页。然后选择一个链接而不是直接输入,我右键单击并选择“在新选项卡中打开链接”,这样就有了选项卡 B。在这一点上,我开始导航 30 分钟 弹出一个警告说我的“ session 已完成。请重新登录。”。我没有被重定向到登录页面,而是被重定向到主页。 (警报必须出现在选项卡 A 上)

如果我只处理一个选项卡,这不是警报后的问题,我会直接转到登录页面。

我有两组代码,一组处理实际 session 过期,另一组发出警报。

此代码用于警报:

function idleLogout() {
var t;
window.onload = resetTimer;
window.onmousemove = resetTimer;
window.onmousedown = resetTimer; 
window.onclick = resetTimer;     
window.onscroll = resetTimer;   
window.onkeypress = resetTimer;

function logout() {
    alert("Session has been finish. Please login again.");
    window.location.href = '{{url("")}}';
}

function resetTimer() {
    clearTimeout(t);
    t = setTimeout(logout, {{ env('SESSION_LIFETIME')*60*1000 }} );  
}
}
idleLogout();

代码按预期工作,但可以更好地实现。

顺便说一句,如果使用 PHP Laravel 5 很重要

最佳答案

问题是您正在使用 JavaScript 来处理超时。 JavaScript(默认情况下)仅限于单个选项卡。虽然你可以 make use of COOKIES 在 JavaScript 中,为了在选项卡之间进行通信,通过服务器端 SESSION 变量处理 session 超时会更有意义,这些变量在选项卡之间持续存在。

可以在 PHP 中实现三十分钟的强制超时,由 this answer 提供:

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // last request was more than 30 minutes ago
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp

希望这对您有所帮助。

关于javascript - 处理多个选项卡上的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48455029/

相关文章:

javascript - XMLHttpRequest 问题

javascript - 错误 : this. 样式未定义?

php - 在 Magento 中获取包含详细信息的所有类别的数组

javascript - 如何设置 session 最大非事件时间?

Asp.net,在哪里存储登录用户的用户名?

javascript - 如何在工具提示中嵌入YouTube视频?

javascript - 如何返回 not found in filter function in jQuery?

php - 在 php 或 java 或 jquery 中将图像转换为刺绣格式

php - Unix 时间戳到 LDAP 时间戳

ios - Facebook "apprequest"对话框要求 facebook 登录,因为应用程序已经将其登录到 facebook