我有一个执行身份验证的处理程序(因为我使用$ .ajax jquery)但是如果我在浏览器中打开两个选项卡(例如google chrome),则第二个选项卡不知道任何会话。 我想在浏览器中保留相同的会话,因为如果用户非常关闭它,如果它打开一个标签并保持在那里(例如)。
说明:
用户输入他的数据 - >去 - > handler.ashx - >进行身份验证 - >去 - >主页
如果我打开一个新标签并写下我网站的网址,它要求我再次登录,我该如何解决这个问题。
我尝试使用class.cs来存储会话,但它没有用。
$。AJAX
function loginUser() {
$("#alertError").hide();
$mail = $("#login_mail").val();
$pass = $("#login_password").val();
if ($mail != "" && $pass != "") {
var jsonData = {
"mail": $mail,
"pass": $pass
}
jsonData = JSON.stringify(jsonData);
$.ajax({
url: "../handlers/users/login.ashx",
cache: false,
type: "POST",
data: jsonData,
success: function (data) {
if (data == "up") {
window.location = "/market/";
loadSlider();
}
else
{
$("#alertError").text("");
$("#alertError").html(data);
$("#alertError").show();
$("#login_password").val("");
$("#login_password").focus();
}
}
});
}
else
{
$("#alertError").text("");
$("#alertError").html("Full fill all the fields.");
$("#alertError").show();
}
}
答案 0 :(得分:1)
这是Web浏览器的故意行为。这是出于安全/保障的原因。如果打开新选项卡并输入Web地址,则新选项卡应完全不知道其他选项卡上的任何状态。相反,如果您通过在网页上按住Ctrl键并单击来打开另一个选项卡,则浏览器将打开一个共享相同浏览上下文的新选项卡。这将是你想要做的一个合理的解决方法。
如果您的目标是打开另一个浏览器选项卡并让其自动登录,则可以使用持久性Cookie完成此操作。但是,您应该知道这引入了一个可以通过XSS利用的安全警告。此外,新的(自动登录)选项卡将不会知道其他会话变量,因为它将使用不同的会话。
在aspx或ashx中你真的没有什么可以欺骗浏览器在两个不共享相同浏览上下文的浏览器标签(或浏览器窗口等)之间共享会话。这将是一个非常大的安全漏洞。
答案 1 :(得分:0)
HttpContext.Session包含当前用户的浏览器会话变量。在ASPX和ASHX代码后面使用它来进行身份验证。在页面重新加载时,您将检查用户是否经过身份验证,否则将重定向到ashx处理程序。
答案 2 :(得分:0)
您是否在登录页面删除会话? 你的Ashx上有这个吗?
public class YourHandleName : IHttpHandler, IRequiresSessionState