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日経っても解決策が見つかりませんでした。
どんな助けにも感謝します:)