生手对Cookie使用的疑问
新手对Cookie使用的疑问
情形1:
结果:
正常情况:

情形2:
把Response.Cookies.Set(c); 拿掉:
结果:

正如你所看到的,这时候无论怎么刷新网页,上次登录时间都停留在那一点。
而Request.Cookies["User_Time"].Value却随时更新。
它之所以能显示当前时间是因为:
HttpCookie c = Request.Cookies["User_Time"];
c是个引用类型,而右边也是,c.Value = DateTime.Now.ToString();
右边的引用拷贝给了c,所以二者相同的引用,左边的值改了,右边也会相应地改。
那么既然已经更新了Request.Cookies["User_Time"].Value为什么反而上次登陆时间会停留不动呢?
程序开头有HttpCookie c = Request.Cookies["User_Time"];呀?
看网上说,Cookies一开始在服务端,当用户第一次登陆的时候,客户端把它传到用户的机器上,那后面应该在用户的机器上直接修改就可以了吧,为什么还用Response.Cookies.Set(c),而不用Request.Cookies.Set(c)?
------解决方案--------------------
cookie是保存在客户端的字符串,Request是请求,Response是响应。
------解决方案--------------------
靠 差点被你骗了 cookies保存在客户端机器上
Response.Cookies.Set(c); 会将当前时间设置到cookies里面
去掉 Response.Cookies.Set(c); 虽然c.Value是 DateTime.Now.ToString()
但是不设置到客户端,等页面的生命周期结束之后,服务器将释放信息自然再次获取之后,c中的value是第一次设置的
情形1:
HttpCookie c = Request.Cookies["User_Time"];
if (c == null)
{
string Time = DateTime.Now.ToString();
HttpCookie hc = new HttpCookie("User_Time", Time);
Response.AppendCookie(hc);
Response.Redirect(Request.Url.ToString());
}
else
{
Response.Write("现在的时间:" + DateTime.Now.ToString() + "<br/>");
Response.Write("上次登录的时间:" + c.Value + "<br/>");
//更新cookie
c.Value = DateTime.Now.ToString();
Response.Cookies.Set(c);
Response.Write("RequestCookie:" + Request.Cookies["User_Time"].Value);
}
结果:
正常情况:
情形2:
把Response.Cookies.Set(c); 拿掉:
Response.Write("现在的时间:" + DateTime.Now.ToString() + "<br/>");
Response.Write("上次登录的时间:" + c.Value + "<br/>");
//更新cookie
c.Value = DateTime.Now.ToString();
Response.Write("RequestCookie:" + Request.Cookies["User_Time"].Value);
结果:
正如你所看到的,这时候无论怎么刷新网页,上次登录时间都停留在那一点。
而Request.Cookies["User_Time"].Value却随时更新。
它之所以能显示当前时间是因为:
HttpCookie c = Request.Cookies["User_Time"];
c是个引用类型,而右边也是,c.Value = DateTime.Now.ToString();
右边的引用拷贝给了c,所以二者相同的引用,左边的值改了,右边也会相应地改。
那么既然已经更新了Request.Cookies["User_Time"].Value为什么反而上次登陆时间会停留不动呢?
程序开头有HttpCookie c = Request.Cookies["User_Time"];呀?
看网上说,Cookies一开始在服务端,当用户第一次登陆的时候,客户端把它传到用户的机器上,那后面应该在用户的机器上直接修改就可以了吧,为什么还用Response.Cookies.Set(c),而不用Request.Cookies.Set(c)?
------解决方案--------------------
cookie是保存在客户端的字符串,Request是请求,Response是响应。
------解决方案--------------------
靠 差点被你骗了 cookies保存在客户端机器上
Response.Cookies.Set(c); 会将当前时间设置到cookies里面
去掉 Response.Cookies.Set(c); 虽然c.Value是 DateTime.Now.ToString()
但是不设置到客户端,等页面的生命周期结束之后,服务器将释放信息自然再次获取之后,c中的value是第一次设置的