IE中的session始终为null

时间:2013-05-20 11:12:25

标签: c# asp.net session cookies generic-handler

我使用会话记住登录我网站的用户,当他浏览我网站的网页时。

我使用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;

- &GT;在我网站的每个页面中,我使用下面的条件来检查用户:

<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
 }

- &GT;这段代码适用于所有浏览器,除了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中签名哦

我提到的问题现在是关于signOut的! 当用户注销然后转到另一个页面时,上面的代码无法理解会话为空且用户已注销!

我该怎么办?

请帮助我!

0 个答案:

没有答案