0

セッションを使用して、Web サイトにサインインしているユーザーが Web サイトのページを閲覧しているときに、そのユーザーを記憶します。

AJAX を使用してサインインします。

<script type="text/javascript">
var url = "SignIn.ashx?username=" + UserName.value + "&password=" + PassWord.value;
    xmlRequest_SignIn.open("GET", url);
    xmlRequest_SignIn.onreadystatechange = function () { ApplyUpdateSignIn() }
    xmlRequest_SignIn.send(null);
</script>

SignIn.ashxファイルでは、ログインの一部にこのコードを使用します。

 // log in 
    context.Session["USERNAME"] = UserName.toString();

System.Web.SessionState.IRequiresSessionStateを埋め込んだことに注意してください

サインアウトには同じスクリプトを使用し、SignOut.ashxファイルでは、次のコードを使用してログアウトします。

 context.Session["USERNAME"] = null;

-> 私のウェブサイトの各ページで、次の条件を使用してユーザーをチェックします。

<script type="text/javascript">
 var url = "checkMember.ashx?";
     xmlRequest_checkMember.open("GET", url);
     xmlRequest_checkMember.onreadystatechange = function () { ApplyUpdatecheckMember() }
     xmlRequest_checkMember.send(null);
</script>

checkMember.ashx :

 if( context.Session["USERNAME"] == null )
 { 
     //user didn't logged in yet
 }
 else
 {
     //user has been logged in
 }

--> このコードは、IE を除くすべてのブラウザで正常に動作します !!! (Chrome、Mozilla、Safari、Opera などのブラウザ)

IE では、ユーザーが別のページに移動するか、現在のページを更新すると、checkMember.ashx の条件が true 値を返し、ユーザーが前のページで署名したことを思い出せません!!

IE ブラウザでは Cookie が有効になっていることに注意してください。

たくさん検索した後、私はこの解決策を見つけました:

<script type="text/javascript">
     var auth = "<% = Request.Cookies[FormsAuthentication.FormsCookieName]==null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value %>";
     var ASPSESSID = "<%= Session.SessionID %>";

     var url = "checkMember.ashx?ASPSESSID=" + ASPSESSID.toString() + "&AUTHID=" + auth.toString();
     xmlRequest_checkMember.open("GET", url);
     xmlRequest_checkMember.onreadystatechange = function () { ApplyUpdatecheckMember() }
     xmlRequest_checkMember.send(null);
</script>

checkMember.ashx :

        string session_cookie_name = "ASP.NET_SessionId";
        if (context.Request.QueryString["ASPSESSID"].ToString() != null)
        {
            UpdateCookie(session_cookie_name, context.Request.QueryString["ASPSESSID"].ToString());
        }

        string auth_cookie_name = FormsAuthentication.FormsCookieName;
        if (context.Request.QueryString["AUTHID"].ToString() != null)
        {
            UpdateCookie(auth_cookie_name, context.Request.QueryString["AUTHID"].ToString());
        }

 if( context.Session["USERNAME"] == null )
 { 
     //user didn't logged in yet
 }
 else
 {
     //user has been logged in
 }

UpdateCookie:

 private void UpdateCookie(string cookie_name, string cookie_value)
 {
     HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookie_name);
     if (null == cookie)
     {
         cookie = new HttpCookie(cookie_name);
     } 
     cookie.Value = cookie_value;
     HttpContext.Current.Request.Cookies.Set(cookie);
 }

これで、このコードは IE でもうまく機能します。

しかし !IEでサインアウトできません!!

私が言及した問題は、現在サインアウトでオンになっています! ユーザーがサインアウトしてから別のページに移動すると、上記のコードは、セッションが null であり、ユーザーがログアウトしたことを理解できません!

私は何をすべきか?

私を助けてください !

4

0 に答える 0