Cookie 提供了一种在 Web 应用程序中存储用户特定信息(如历史记录或用户首选项)的方法。

Cookie 是一小段文本。伴随着请求和响应在 Web server和client之间来回传输。Cookie 包括每次用户訪问网站时可由 Web 应用程序读取的信息。

1. 写Cookie

浏览器管理client计算机上的 Cookie。使用 HttpResponse 对象可向client发送 Cookie,该对象会公开称为 Cookies 的属性。

不论什么须要 Web 应用程序发送到浏览器的 Cookie 都必须加入到此集合中。编写新 Cookie 时。必须指定 Name 和 Value。

每一个 Cookie 必须有一个唯一的名称,这样在以后当浏览器随同请求发送 Cookie 时,Web 应用程序就能够标识该 Cookie。

默认情况下,Cookie 由位于同一域中的全部页面共享,但能够通过设置 Cookie 的 Path 属性将 Cookie 限制在站点中的特定子目录。若要同意应用程序的全部目录中的全部页面都检索一个 Cookie。请从应用程序根目录中的页面设置该 Cookie,但不要设置 Path 属性。

假设不指定该 Cookie 的过期限制,则该 Cookie 将不会保留在client计算机上,当用户会话到期时该 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 方法可从server端的集合中移除 Cookie,使 Cookie 不会被发送至client。

可是,假设client已存在 Cookie,则该方法无法从client将其移除。

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,然后将其发送到浏览器来覆盖client上的旧版本号 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 中。比如,不要将用户的password存储在 Cookie 中。即使是临时存储也不要这样做。

通常。不要将不论什么信息保存在 Cookie 中,由于一旦它被假冒,就会危及您的应用程序的安全。

而是在 Cookie 中保存对信息在server上的位置的引用。

将 Cookie 的过期日期设置为可接受的最短实际时间。尽可能避免使用永久 Cookie。

考虑对 Cookie 中的信息加密。

考虑将 Cookie 的 Secure 和 HttpOnly 属性设置为 true。

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

APS.NET Cookie的更多相关文章

  1. .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息

    在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...

  2. IE10、IE11 ASP.Net 网站无法写入Cookie 问题

    在做项目的时候遇上一个奇怪的问题,这个项目是用前端DWZ框架+MVC框架做的,在IE10和IE11上, 用户登录之后,操作界面中的任何操作,都无法操作,抛出异常,经过查找分析发现, 只有在IE10和I ...

  3. 超大 Cookie 拒绝服务攻击

    有没有想过,如果网站的 Cookie 特别多特别大,会发生什么情况? 不多说,马上来试验一下: for (i = 0; i < 20; i++) document.cookie = i + '= ...

  4. IE10、IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题

    你是否遇到过当使用一个涉及到Cookie操作的网站或者管理系统时,IE 6.7.8.9下都跑的好好的,唯独到了IE10.11这些高版本浏览器就不行了?好吧,这个问题码农连续2天内遇到了2次.那么,我们 ...

  5. 解决cookie跨域访问

    一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...

  6. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  7. 一个诡异的COOKIE问题

    今天下午,发现本地的测试环境突然跑不动了,thinkphp直接跑到异常页面,按照正常的排错思路,直接看thinkphp的log 有一条 [ error ] [2]setcookie() expects ...

  8. [转载]Cookie/Session的机制与安全

    Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以知道当前是和哪个客户在打交道.本文来详细讨论Cookie和Session的实现机制,以及其中涉及的安全问题. 因 ...

  9. jquery.cookie的使用

    今天想到了要为自己的影像日记增加赞的功能,并且需要用到cookie. 记得原生的js操作cookie也不是很麻烦的,但似乎jquery更简单,不过相比原生js,需要额外引入2个文件,似乎又不是很好,但 ...

随机推荐

  1. 【C语言】超大数乘法运算

    昨天做排列组合的时候遇到A(a,b)这个问题,需要计算A(20,20)超大,计算机32位的,最大数只能是2^32,这让我很悲伤! 于是乎就自己研究了如何进行超大数的计算! /************* ...

  2. 10个优秀的 HTML5 &amp; CSS3 下拉菜单制作教程

    下拉菜单是一个非经常见的效果.在站点设计中被广泛使用.通过使用下拉菜单.设计者不仅能够在站点设计中营造出色的视觉吸引力,但也能够为站点提供了一个有效的导航方案.使用 HTML5 和 CSS3 能够更e ...

  3. 窗口绘制有关的消息整理 WM_PAINT, WM_NCPAINT, WM_ERASEBKGND

    WM_PAINTWM_PAINT是Windows窗口系统中一条重要的消息,应用程序通过处理该消息实现在窗口上的绘制工作. WM_NCPAINT当窗口客户区以外的部分(如窗口标题栏.菜单栏等)需要需要重 ...

  4. 怎样取消shutdown关机命令?-shutdown命令的使用解析

    机房上课,可恶电脑总是被管理员測试,不时地弹出这个关机提示.怎样取消这个关机命令呢?其有用 shutdown -a 就可以.以下来学习一下shutdown命令的使用:   shutdown这个命令预计 ...

  5. Mac OS设置rootpassword

    不知怎么忘记mac os系统的rootpassword了 方法一: 首先,启动机器,启动时按住Apple和S键,以单用户模式(single user mode)进入系统.输入:mount -uw / ...

  6. mysql5.6 主从配置

    参考网址:http://www.cnblogs.com/zhoujie/p/mysql1.html http://kerry.blog.51cto.com/172631/277414/ 1.配置主库: ...

  7. 获取synchronized锁中的阻塞队列中的线程是非公平的

    synchronized中阻塞队列的线程是非公平的 测试demo: import java.text.MessageFormat; import java.text.SimpleDateFormat; ...

  8. Swift - 将表格UITableView滚动条移动到底部

    有时我们需要通过代码自动将表格UITableView滚动条移动到尾部,只需要使用scrollToRowAtIndexPath方法即可,代码如下: 1 2 3 4 5 var secon = 1 //最 ...

  9. 给c++程序员的一份礼物——常用工具集

    给c++程序员的一份礼物——常用工具集 [声明]如需复制.传播,请附上本声明,谢谢.原文出处:http://morningspace.51.net/,moyingzz@etang.com 所谓&quo ...

  10. 【总结】在VirtualBox上面安装Mac的注意事项

    看此文之前 http://www.crifan.com/category/work_and_job/virtual_machine/virtualbox-virtual_machine/ 此文仅仅是针 ...