我有个项目,登录时候用 Cookie 保持登录信息!如下代码                    HttpContext.Current.Session["UNAME"] = name;
                    HttpCookie Cookie_Login = new HttpCookie("Cookie_Login");
                    Cookie_Login.Value = name + "$" + pw;
                    Cookie_Login.Expires = DateTime.Now.AddMinutes(int.Parse(System.Configuration.ConfigurationManager.AppSettings["cookieTime"].ToString()));
                    HttpContext.Current.Response.Cookies.Add(Cookie_Login);然后有个方法检测用户登录状态    public bool CheckLogin(bool isRedirect)
    {
        bool isLogin = HttpContext.Current.Session["UNAME"] != null ? true : false;
        if (!isLogin)
        {
            Response.Write("Session 为空,开始读取 Cookie </br>");
            if (HttpContext.Current.Request.Cookies["Cookie_Login"] != null)
            {
                Response.Write("Cookie 不为为空,开始处理 Cookie </br>");
                string[] Cookie_Login = HttpContext.Current.Request.Cookies["Cookie_Login"].Value.ToString().Split('$');
                if (Cookie_Login.Length > 1)
                {
                    Response.Write("Cookie 长度大于0 开始自动登录 </br>");
                }
                else
                {
                    Response.Write("Cookie 长度为0</br>");
                }
            }
        }
        if (!isLogin)
        {
            if (isRedirect)
            {
                HttpContext.Current.Response.Redirect("/index.aspx");
            }
        }
        return isLogin;
    }在正常登录保存了Cookie后,我重新编译项目,然后刷新一个在 PageLoad 里面调用了 CheckLogin 的页面
这个时候页面输出结果是Session 为空,开始读取 Cookie 
Cookie 不为为空,开始处理 Cookie 
Cookie 长度为0
然后我重新刷新页面(并不重新编译项目),这个时候页面输出结果变成了Session 为空,开始读取 Cookie 
Cookie 不为为空,开始处理 Cookie 
Cookie 长度大于0 开始自动登录 这个时候我再重新编译项目,然后刷新页面,结果又是Session 为空,开始读取 Cookie 
Cookie 不为为空,开始处理 Cookie 
Cookie 长度为0再刷新页面Session 为空,开始读取 Cookie 
Cookie 不为为空,开始处理 Cookie 
Cookie 长度大于0 开始自动登录 为什么在我重新编译项目后,第一次刷新页面读取到的 Cookie 不为 null 但却为 "" 呢, 但再次刷新页面后读取到的Cookie却不为 ""  了呢?
谁能解答我的问题?

解决方案 »

  1.   

    在正常登录保存了Cookie后,我重新编译项目,然后刷新一个在 PageLoad 里面调用了 CheckLogin 的页面 
    这个时候页面输出结果是 Session 为空,开始读取 Cookie 
    Cookie 不为为空,开始处理 Cookie 
    Cookie 长度为0 
    ==
    这个时候输出的cookie就是空字符串么?
      

  2.   

    正常登录保存了Cookie后,我重新编译项目,然后刷新一个在 PageLoad 里面调用了 CheckLogin 的页面 
    ==
    这个也有问题,一般是在Global.asax的Session_Start事件中处理
      

  3.   

    Cookie_Login.Value = name + "$" + pw;
    ==
    可以考虑使用多键值的Cookie写法HttpCookie Cookie_Login = new HttpCookie("Cookie_Login");
    Cookie_Login.Values["name"] = name;
    Cookie_Login.Values["pwd"] = pw;
    Cookie_Login.Expires = DateTime.Now.AddMinutes(int.Parse(System.Configuration.ConfigurationManager.AppSettings["cookieTime"].ToString()));
    Response.Cookies.Add(Cookie_Login);
      

  4.   

    是否添加了IsPostback,Cookies["Cookie_Login"] 不为null主要是值问题
    if(!IsPostback)
    {
    CheckLogin(isRedirect)
    }
    调试跟踪看看数据就知道了