日期:2014-05-17  浏览次数:20448 次

StateServer Cookies问题
登录代码
C# code

if (!string.IsNullOrEmpty(AutoLogin))
            {//添加cookies
                HttpCookie hc = new HttpCookie("userid");
                hc.Value = CurrentMember.ID.ToString();
                hc.Expires = DateTime.Now.AddDays(1000);
                context.Response.Cookies.Add(hc);
            }
            else
            {//移除cookies
                HttpCookie hc = new HttpCookie("userid");
                hc.Expires = DateTime.Now.AddDays(-10000);
                context.Response.Cookies.Add(hc);
            }


读取cookies的代码
C# code

HttpCookieCollection hcc = context.Request.Cookies;
            if (currentMember == null)
            {
                Log.write("session为空,检测Cookies值");
                if (hcc["userid"] != null)
                {
                    Log.write("cookies值不为空,值为" + hcc["userid"].Value);
                    currentMember = ModelList.MemberList.Where(x => x.ID == hcc["userid"].Value.ToInt()).FirstOrDefault();
                }
            }


web.config部分配置
XML code

<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>


情况是这样的
假如当前出了以下问题
情况一:任何一个用户访问网站,不管他是否登录,也就说不管有没有cookies,都会自动登录成userid为1的用户,即使把“自动勾掉”都不行
这时,如果重新编译整个网站,又会出现以下问题
情况二:任何一个用户访问网站,登录之后,不管他有没有选择自动登录,都无法实现自动登录,也就是说cookies没有获取到
这时,如果再重新编译整个网站,又会出现情况一,再编译,又成了情况二
这哪儿跟哪儿啊···迷糊了····

------解决方案--------------------
context.Response.Cookies

context.Request.Cookies
都是可以使用的,但他们是有区别的,使用的时候要注意,参见区别
Request.Cookies 和 Response.Cookies 的区别
------解决方案--------------------
{//移除cookies
HttpCookie hc = new HttpCookie("userid");
hc.Expires = DateTime.Now.AddDays(-10000);
context.Response.Cookies.Add(hc);
为何每次都要new一下,
这个应该是request.cookie["useid"]