• ASP.Net Cookie机制解析


    一、Cookie的作用

    一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。Cookie就是这样一种机制,用来解决HTTP协议无状态的不足。

     二、什么是Cookie?

    Cookie是一小段文本信息,是HTTP协议的一部分。客户端请求服务器的过程中,Cookie在web服务器和浏览器之间进行传递。

    Cookie和网站关联,当同一个用户访问不同的站点时,各个站点都可能会向用户的浏览器发送一个 Cookie;浏览器会分别存储所有 Cookie。Cookie也和浏览器相关,不同的浏览器存储不同的Cookie。

    Cookie的使用场景:a、记录上次登录的用户名。b、记录登录时间。c、记录用户最近浏览的商品。

    Cookie具有不可跨域性,根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。Cookie在客户端是由浏览器来管理的,浏览器判断一个网站是否能操作另一个网站的Cookie的依据是域名,Google和baidu的域名不一样,因此Google网站只能操作自己的Cookie。

    注意:虽然网站image.google.com与网站www.google.com同属于Google,但是域名不一样,二者同样也不能相互操作彼此的Cookie。

    三、Cookie的限制

    各大浏览器对cookie的限制不同:

      IE6.0 IE7.0/8.0 Opera FF Safari Chrome
    cookie的个数 每个域为20个 每个域50个 每个域20个 每个域50个 没有个数限制 每个域53个
    cookie的大小 4095个字节 4095个字节 4096个字节 4097个字节 4097个字节 4097个字节

    如果到了这个限制,浏览器就会删除旧的cookie,而不需要和用户交互。

     四、cookie的读写

    Cookie通过HttpResponse对象发送到浏览器,通过HttpRequest对象读取浏览器发送来的Cookie值。要发送给浏览器的所有Cookie都必须添加到Cookie的集合中,创建Cookie是,需要指定Name和Value,因为Cookie是按照名称存储,名称相同时,后者将覆盖前者的Cookie。

    写入Cookie:

    1 HttpCookie hc=new HttpCookie("");
    2 hc.Value="";
    3 hc.Expires=DateTime.Now.AddDays(7);//设置Cookie的过期时间
    4 context.Response.Cookies.Add(hc);//在Cookie集合中添加一条数据,当客户端对服务器发送请求时,服务器会将Cookie返回给浏览器。
    实例

    读取Cookie:

    1 HttpCookie hc=context.Request.Cookies[""];
    2 if(hc!=null)
    3 {
    4   context.Response.Write(hc.Value);
    5 }
    实例

    删除Cookie,即将Cookie的时间设置为过期:

    1 int n=context.Request.Cookies.Count;
    2 for(int i=0;i<n;i++)
    3 {
    4   HttpCookie hc=context.Request.Cookies[i];
    5   hc.Expires=DateTime.Now.Add(-1);//设置Cookie的过期时间为负数
    6   context.Response.Cookies.Add(hc);
    7 }
    实例

    五、Cookie的过期时间

    如果没有设置时间,Cookie存储在内存中,当客户端关闭浏览器时,Cookie自动销毁;如果设置了时间,Cookie存储在用户的硬盘中。删除Cookie时,只要将Cookie的过期时间设置为负数就可以了,设置Expires属性即可。

  • 相关阅读:
    Java 开发 gRPC 服务和客户端
    Springcloud中的region和zone的使用
    Spring Boot中使用AOP记录请求日志
    JDK1.8中的Lambda表达式和Stream
    机器学习之SVM
    机器学习之决策树
    【iOS开发】emoji表情的输入思路
    block为什么要用copy,runtime的简单使用
    swift和oc混编
    iOS之AFN错误代码1016(Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable)
  • 原文地址:https://www.cnblogs.com/hwy2014/p/4080779.html
Copyright © 2020-2023  润新知