Cookie简介

Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。

  以下最好都了解下,这样学习更加有逻辑性。知其出现的原因才能更好的知道什么情况下使用

Cookie的运行流程

  当在浏览器地址栏中键入了Amazon的URL,浏览器会向Amazon发送一个读取网页的请求,并将结果在显示器上显示。这时该网页在你的电脑上寻找Amazon网站设置的Cookie文件,如果找到,浏览器会把Cookie文件中的数据连同前面输入的URL一同发送到Amazon服务器。服务器收到Cookie数据,就会在他的数据库中检索你的ID,你的购物记录、个人喜好等信息,并记录下新的内容,增加到数据库和Cookie文件中去。如果没有检测到Cookie或者你的Cookie信息与数据库中的信息不符合,则说明你是第一次浏览该网站,服务器的CGI程序将为你创建新的ID信息,并保存到数据库中。
  Cookie是利用了网页代码中的HTTP头信息进行传递的,浏览器的每一次网页请求,都可以伴随Cookie传递,例如,浏览器的打开或刷新网页操作。服务器将Cookie添加到网页的HTTP头信息中(http Header),伴随网页数据传回到你的浏览器,浏览器会根据你电脑中的Cookie设置选择是否保存这些数据。如果浏览器不允许Cookie保存,则关掉浏览器后,这些数据就消失。Cookie在电脑上保存的时间是不一样的,这些都是由服务器的设置不同决定的。Cookie有一个Expires(有效期)属性,这个属性决定了Cookie的保存时间,服务器可以通过设定Expires字段的数值,来改变Cookie的保存时间。如果不设置该属性,那么Cookie只在浏览网页期间有效,关闭浏览器,这些Cookie自动消失,绝大多数网站属于这种情况。通常情况下,Cookie包含Server、Expires、Name、value这几个字段,其中对服务器有用的只是Name和value字段,Expires等字段的内容仅仅是为了告诉浏览器如何处理这些Cookies。

主要解决问题

  服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息
  1. 保存用户登录信息,下次不用再输入用户名和密码
  2. 网站个人化, 根据用户在网站中的个性化设置,下次进入网站,就可以不用看到不想看到的新闻或者内容了。
  3. 其他

生存周期

  Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。
  Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。

问题

  如果在一台计算机中安装多个浏览器,Cookie可以共享吗?是怎么处理的?
  每个浏览器都会在各自独立的空间存放cookie。因为cookie中不但可以确认用户,还能包含计算机和浏览器的信息,所以一个用户用不同的浏览器登录或者用不同的计算机登录,都会得到不同的cookie信息,另一方面,对于在同一台计算机上使用同一浏览器的多用户群,cookie不会区分他们的身份,除非他们使用不同的用户名登录。

代码实现

Cookie源码:(这里是version=1,Servlet3.0后,同时支持版本0和1,也可以混用这两个版本的属性)

public class Cookie implements Cloneable {

    private static final String LSTRING_FILE = "javax.servlet.http.LocalStrings";
    private static ResourceBundle lStrings = ResourceBundle.getBundle(LSTRING_FILE);

    private String name;    
    private String value;   
    private String comment; 
    private String domain;  
    private int maxAge = -1;    
    private String path;    
    private boolean secure; 
    private int version = 0;    
    /*
    还有构造方法和setter,getter方法
    */
}

属性说明:
name: 保存cookie的名字,相当于map中的key
value: 保存到cookie中的值,相当于map中的value
comment: 该Cookie的用处说明。浏览器显示Cookie信息的时候显示该说明
domain: 域,表示当前cookie所属于哪个域或子域下面。
maxAge: time/Max-age:表示了cookie的有效期。max-age指定当前cookie是在多长时间之后而失效。如果服务器返回的一个cookie,没有指定,那么表明此cookie有效期只是当前的session,即是session cookie,当前session会话结束后,就过期了。对应的,当关闭(浏览器中)该页面的时候,此cookie就应该被浏览器所删除了。
path: 表示cookie的所属路径。
secure: 表示该cookie只能用https传输。一般用于包含认证信息的cookie,要求传输此cookie的时候,必须用https传输。
version: 该Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC2109规范

Cookie增删改查:

- 添加Cookie:

Cookie cookie = new Cookie(name,value);

- 发送Cookie

 response.addCookie(cookie);

- 读取Cookie

 request.getCookies(); //返回的是一个Cookie数组。

  虽然Cookie是一个键值对结构,但是它并没有给咱们提供一个根据键获取值的方法。我们要想读取Cookie的信息,只能通过遍历数组。

- 修改Cookie

  一旦Cookie发给浏览器以后,服务器便不能直接修改Cookie, 但是可以通过使用同名Cookie来替换的老Cookie方式来间接的修改

  • 注意:
      Cookie没有删除方法,只能通过设置有效时间,或者通过设置一个空值来擦除掉不想有的Cookie
cookie.setMaxAge(0);  //代表Cookie立即失效,浏览器不会保存。
cookie.setMaxAge(-100); // 当秒数小于0时,和不设置是一样,一次会话中有效

推荐一个特别详细的网址: https://www.cnblogs.com/andy-zhou/p/5360107.html
                       参考:百度百科和其他人关于Cookie的博文
  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值