0

asp.net、Visual Studio 2012、IIS8、.Net Framework 4 で Web サイトを開発しています。

ログイン後にユーザー情報を保存するために 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);

SignIn.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);

SignOut.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 = "";

ご覧のとおり、セッションを null または無効にするためにあらゆることを試しました。このコードは、Internet Explorer を除くすべてのブラウザ (Chrome、FireFox、Safari、Opera、Netscape など) で正常に動作します。

サインアウト後の IE で、CheckMemberAccount.ashx ファイルを使用してメンバー アカウントを確認すると、サインアウトが発生しなかったかのように、セッションは有効な値で引き続き有効です。

この問題はIEだけです!!

IE の設定はすべてデフォルトのままであることに注意してください。

Global.asaxを試しました:

クラスを追加した後、コードを追加せずに ( Session_Start() などのデフォルト関数で変更しないでください)、問題が変わり、 CheckMemberAccount.ashx のセッションで常に null を取得するようになりました! また、問題は IE にあります。

3日経っても解決策が見つかりませんでした。

どんな助けにも感謝します:)

4

1 に答える 1

1

checkmemberaccount 呼び出しが iE によってブラウザにキャッシュされていると思います。これは以前に何度も私を悩ませました。Ajax 呼び出しに確率変数を追加すると、問題が解決されると思います。

これは、フィドラーなどのツールを使用して確認できます。ブラウザーが GET 要求をキャッシュしていることがわかります。GET から POST に切り替えることもできます。投稿は IE によってキャッシュされません。

ところで... キャッシュしたくない get リクエストについては、これを修正する必要があります。

于 2013-06-09T10:01:06.760 に答える