【发布时间】:2023-03-23 20:05:02
【问题描述】:
我的应用程序中存在不允许用户在浏览器中打开应用程序的多个实例的情况。所以我们正在读取 cookie,如果已经打开了一个会话,我们会提醒用户他们正在尝试打开多个会话。
有时,如果浏览器由于某种原因崩溃,浏览器仍然有旧的 cookie,当用户尝试再次打开应用程序时,浏览器不允许用户登录。用户必须从浏览器历史记录中手动删除 cookie。企业不想要这个过程。
仅供参考,我正在使用 angularJS
Found the same question in other post but didn't find an answer I want here有人可以帮我解决这个问题吗?提前致谢!
我想出了以下代码。但是当应用程序崩溃时,cookie 仍然存在于浏览器中,根本不允许用户登录。我现在唯一的解决方法是从浏览器中手动删除 cookie 并登录。
var duplicateApp = false;
function createCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + value + expires + "; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
window.onload = function(){
var MyAppCount=readCookie("MyApp");
if (MyAppCount > 0) {
duplicateApp = true;
alert("You are attempting to open multiple application sessions.\n\nPlease close any existing application from the web browser before restarting the application.");
var win = window.open("about:blank", "_self"); win.close();
}
else {
duplicateApp = false;
createCookie("MyApp", 1, 1);
window.onunload = function(){
if (duplicateApp == false) eraseCookie("MyApp");
};
}
};
您能否建议我进行任何更改以限制用户仅打开应用程序的单个实例。
【问题讨论】:
-
一般来说,如果每个用户需要一个会话,更好的选择是在创建新会话时使旧会话无效,而不是在旧会话存在时尝试阻止新会话。这将解决浏览器崩溃的问题,并使用户永远无法登录。
-
对我来说听起来像是软件逻辑/架构问题。
-
非常感谢您的建议。使旧会话无效而不是阻止新会话是有意义的。
标签: javascript angularjs session cookies