我正在使用 asp.net、visual studio 2012、IIS8、.Net Framework 4 开发一个网站。
登录后我使用 SESSIONS 存储用户信息。
当用户单击登录按钮时,我将信息发送到 .ashx 文件,如下所示:
var url = "SignIn.ashx?username=" + UserName.value + "&password=" + PassWord.value;
xmlRequest_SignIn.open("GET", url);
xmlRequest_SignIn.onreadystatechange = function () { ApplyUpdateSignIn() }
xmlRequest_SignIn.send(null);
登录.ashx:
... // check login information and then
HttpContext.Current.Session["UserName"] = username.toString();
...
现在在我网站的每个页面中,我都会检查此会话以在 ajax 中对用户进行身份验证:
var url = "CheckMemberAccount.ashx";
xmlRequest_member.open("GET", url);
xmlRequest_member.onreadystatechange = function () { ApplyUpdateGetMemberAccount() }
xmlRequest_member.send(null);
CheckMemberAccount.ashx:
if (Convert.ToString(HttpContext.Current.Session["UserName"]) == "" || null == HttpContext.Current.Session["UserName"])
{
// user not logged in
}
else
{
// user logged in
}
对于注销,我也使用 ajax:
var url = "SignOut.ashx";
xmlRequest_SignOut.open(GET, url);
xmlRequest_SignOut.onreadystatechange = function () { ApplyUpdateSignOut() }
xmlRequest_SignOut.send(null);
签出.ashx:
// I try everything to make the session null or invalid!
// BUT it doesn't take effect in Internet Explorer !!
HttpContext.Current.Session["UserName"] = "";
HttpContext.Current.Session["UserName"] = null;
HttpContext.Current.Session.Clear();
HttpContext.Current.Session.RemoveAll();
HttpContext.Current.Session.Abandon();
HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value = "";
如您所见,我已尝试一切使会话无效或无效。此代码适用于所有浏览器(Chrome、FireFox、Safari、Opera、Netscape...),但在 Internet Explorer 中除外!
退出后在 IE 中,当我使用 CheckMemberAccount.ashx 文件检查成员帐户时,会话仍然保持有效且具有有效值,就好像没有发生退出一样!
这个问题只存在于 IE 中!!
请注意,IE 设置均采用默认设置。
我试过Global.asax:
添加类之后,并且没有添加任何代码(只需使用它的默认函数保持不变,例如 Session_Start() ),我的问题发生了变化,现在我在 CheckMemberAccount.ashx 中的会话总是为 null !问题又出在 IE 中!
3天后我没有找到任何解决方案。
我会很感激任何帮助:)