你不能直接删除用户计算机中的 Cookie。但是,你能够通过把 Cookie 的有效日期设置成一个已经过去的日期来指挥用户浏览器对 Cookie 进行删除。用户在下一次对设置在 Cookie 中的域或路径中的页面进行访问的时候,浏览器会检测并删除已经过期的 Cookies。
提示:调用 Cookies
集合的 Remove
方法可以在服务器端把 Cookie 从集合中删除,但是 Cookie 将不会被发送到客户端。因此,这个方法不会从客户端删除已经存在的 Cookie。
为 Cookie 指派一个已经过去的日期
-
检测 Cookie 是否存在,如果存在,创建一个拥有相同名称的新 Cookie。
-
把新 Cookie 的有效日期设置成一个已经过去的时间。
-
把这个新 Cookie 添加到
Cookies
集合对象中。如下代码实例说明了如何为 Cookie 设置一个已经过去的日期。
if (Request.Cookies["UserSettings"] != null) { HttpCookie myCookie = new HttpCookie("UserSettings"); myCookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(myCookie); }
编译代码
该实例需要:
-
一个 ASP.NET Web 页面。
-
先前被写入的 Cookie(名为 UserSettings),与[ASP.NET 实践:写入 Cookie]中所例示的一样。
健壮编程
因为安全原因,你只能够对被相同域中的页面所设置的 Cookies 进行读取。如果 Cookie 的 Path
属性已经被设置,那么这个 Cookie 同样只在路径中所指定的相同域的页面和子目录中可用。
在读取特定 Cookie 的值的时候,先测试该 Cookie 是否存在并且是否已经赋值,否则会发生一个 NullReferenceException
异常。
安全性
浏览器只能够把数据回发到最初创建 Cookie 的服务器中。但是,恶意用户能够对 Cookies 进行访问并且读取其中的内容。所以不要把机密信息存储到 Cookie 中,如用户名称或密码。而是存储一个能够用来在服务器上查寻机密信息的记号。另外,Cookies 还能够被篡改,所以 Cookie 中的任何数据都应该使用防止跨网站脚本攻击时的策略来进行测试。更多信息,请参考:[ASP.NET 实践:在 Web 应用程序防止反向脚本开发]。