asp.net如何使用cookies?

C# :

方法1:

Response.Cookies["username"].Value="gjy";

Response.Cookies["username"].Expires=DateTime.Now.AddDays(1);

方法2:

System.Web.HttpCookie newcookie=new HttpCookie("username");

newcookie.Value="gjy";

newcookie.Expires=DateTime.Now.AddDays(1);

Response.AppendCookie(newcookie);

创建带有子键的cookies:

System.Web.HttpCookie newcookie=new HttpCookie("user");

newcookie.Values["username"]="gjy";

newcookie.Values["password"]="111";

newcookie.Expires=DateTime.Now.AddDays(1);

Response.AppendCookie(newcookie);

cookies的读取:

无子键读取:

if(Request.Cookies["username"]!=null)

{

Response.Write(Server.HtmlEncode(Request.Cookies["username"].Value));

}

有子键读取:

if(Request.Cookies["user"]!=null)

{

Response.Write(Server.HtmlEncode(Request.Cookies["user"]["username"].Value));

}

不设置有效期限,cookie应该是存储在内存中。其存活时间跟session会话应该是一致的。

设定了有效期限后,才会存储到硬盘上。

由于COOKIES的设置简单,使用起来也很方便,因此,平时直接读写COOKIE的过程中并没有发现COOKIE的Expires问题。

当从 REQUEST获取一个COOKIES实例后,如果不重新设置Expires的情况下再次将COOKIES发送到客户端,Expires会变成关闭页面过期。

举个例:

先在一个页面里发送COOKIES

HttpCookie _currentCookie;

_currentCookie = new HttpCookie("test");

_currentCookie.Expires = DateTime.Now.AddYears(1);

Response.AppendCookie(_currentCookie);

然后再另一个页面将它接收

HttpCookie _currentCookie;

_currentCookie = Request.Cookies["test"];

此时,我们可以通过获取并显示出Expires过期时间。

Response.Write(_currentCookie.Expires.ToString());

照常理,我们没有改动这个COOKIES,获取后原封不动的有发送到了浏览器,应该不会有什么变化。

但是实际上会发现一个问题

_currentCookie["test"].Expires 变成了 0001-1-1 关闭页面后即过期。

通过以上实验,发现,实际上我们无法获取COOKIES的Expires属性,所以,在使用Response.AppendCookies的时候,如果该实例没有重新设置Expires,则Expires会以默认设置(页面关闭过期)被发送,因此每次发送COOKIE如果你希望有过期时间都必须重新设置。

这个问题是我在封装COOKIE时遇到的,虽然以前也非常经常的用到COOKIES,但是这次因为想封装成一个独立的类,所以在精简代码的过程中遇到这样的问题!

看来,不管多熟悉的东西,它总会有让人陌生的一面,需多多学习!

当然,这是在.NET2.0 C#中,似乎1.1中是可以获取REQUEST过来的COOKIE的Expires属性的。

-

本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/16383.htm