APS.NET Cookie

Cookie 提供了一种在 Web 应用程序中存储用户特定信息(如历史记录或用户首选项)的方法。Cookie 是一小段文本,伴随着请求和响应在 Web 服务器和客户端之间来回传输。Cookie 包含每次用户访问站点时可由 Web 应用程序读取的信息。


1. 写Cookie

浏览器管理客户端计算机上的 Cookie。使用 HttpResponse 对象可向客户端发送 Cookie,该对象会公开称为 Cookies 的属性。任何需要 Web 应用程序发送到浏览器的 Cookie 都必须添加到此集合中。编写新 Cookie 时,必须指定 Name 和 Value。每个 Cookie 必须有一个唯一的名称,这样在以后当浏览器随同请求发送 Cookie 时,Web 应用程序就可以标识该 Cookie。

默认情况下,Cookie 由位于同一域中的所有页面共享,但可以通过设置 Cookie 的 Path 属性将 Cookie 限制在网站中的特定子文件夹。若要允许应用程序的所有文件夹中的所有页面都检索一个 Cookie,请从应用程序根文件夹中的页面设置该 Cookie,但不要设置 Path 属性。
如果不指定该 Cookie 的过期限制,则该 Cookie 将不会保留在客户端计算机上,当用户会话到期时该 Cookie 即到期。
Cookie 仅能存储 String 类型的值。在将任何非字符串值存储到 Cookie 中之前,必须将它们转换为字符串

HttpCookie myCookie = new HttpCookie("Cooker");
myCookie["name"] = "zzh";
myCookie["today"] = "friday";
myCookie.Expires = DateTime.Now.AddDays(1);
//myCookie.Expires.AddDays(1);
Response.Cookies.Add(myCookie);
//Response.AppendCookie(myCookie);
myCookie.Domain = "abc.com"; //指定作用域abc.com和子域名如a.abc.com可用
myCookie.Path = "/admin"; //只能用于 admin 文件夹或虚拟根目录中的页面

2. 读Cookie

出于安全原因,您只能读取属于同一域的页所设置的 Cookie。如果已设置 Cookie 的 Path 属性,则只有该域路径中的页和子文件夹能够使用该 Cookie。
在读取特定 Cookie 值时,请测试该 Cookie 是否存在以及它是否具有值,否则将发生异常。
Cookie 中的所有值都作为 String 类型存储,因此若要将 Cookie 值作为其他数据类型使用,必须对值进行相应地转换。

if (Request.Cookies["Cooker"] != null)
{
    string Cooker;
    if (Request.Cookies["Cooker"]["name"] != null)
    { Cooker = Request.Cookies["Cooker"]["name"]; }
}

3. 删Cookie

不能直接删除用户计算机中的 Cookie。但是,可以通过将 Cookie 的到期日期设置为过去的日期,让用户的浏览器来删除 Cookie。当用户下一次向设置该 Cookie 的域或路径内的页发出请求时,浏览器将确定该 Cookie 已到期并将其移除。

调用 Cookies 集合的 Remove 方法可从服务器端的集合中移除 Cookie,使 Cookie 不会被发送至客户端。但是,如果客户端已存在 Cookie,则该方法无法从客户端将其移除。

if (Request.Cookies["Cooker"] != null)
{
    HttpCookie myCookie = new HttpCookie("Cooker");
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    Response.Cookies.Add(myCookie);
}
循环删

HttpCookie aCookie;
string cookieName;
int limit = Request.Cookies.Count;
for (int i=0; i<limit; i++)
{
    cookieName = Request.Cookies[i].Name;
    aCookie = new HttpCookie(cookieName);
    aCookie.Expires = DateTime.Now.AddDays(-1);
    Response.Cookies.Add(aCookie);
}


4. 改Cookie

不能直接修改 Cookie。更改 Cookie 的过程涉及创建一个具有新值的新 Cookie,然后将其发送到浏览器来覆盖客户端上的旧版本 Cookie。下面的代码示例演示如何更改存储用户对站点的访问次数的 Cookie 的值

int counter;
if (Request.Cookies["counter"] == null)
    counter = 0;
else
{
    counter = int.Parse(Request.Cookies["counter"].Value);
}
counter++;
Response.Cookies["counter"].Value = counter.ToString();
Response.Cookies["counter"].Expires = DateTime.Now.AddDays(1);

5. Cookie安全

不要将任何关键信息存储在 Cookie 中。例如,不要将用户的密码存储在 Cookie 中,即使是暂时存储也不要这样做。通常,不要将任何信息保存在 Cookie 中,因为一旦它被假冒,就会危及您的应用程序的安全。而是在 Cookie 中保存对信息在服务器上的位置的引用。
将 Cookie 的过期日期设置为可接受的最短实际时间。尽可能避免使用永久 Cookie。
考虑对 Cookie 中的信息加密。
考虑将 Cookie 的 Secure 和 HttpOnly 属性设置为 true。


Cookie.Secure=true 使 Cookie 只能在使用安全套接字层 (SSL) 的连接上传输。SSL 并不能防止保存在用户计算机上的 Cookie 被读取或操作,但可防止 Cookie 在传输过程中被读取,因为 Cookie 已被加密。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值