0

我正在使用 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天后我没有找到任何解决方案。

我会很感激任何帮助:)

4

1 回答 1

1

我相信 checkmemberaccount 调用被 iE 缓存在浏览器中。这让我以前多次遇到麻烦。在您的 Ajax 调用中添加一个随机变量,我相信您的问题将得到解决。

您可以使用 fiddler 之类的工具来验证这一点。您应该看到浏览器正在缓存 GET 请求。您也可以从 GET 切换到 POST。POST 不被 IE 缓存。

顺便说一句...您应该为您不想缓存的任何获取请求修复此问题。

于 2013-06-09T10:01:06.760 回答