java 模拟浏览器的cookie管理机制

cookie的格式

cookie是一段文本,里面只能包含ascii字符,不能含有逗号和号,也就是说只能包含那128个字符的一些字符,不可能包含例如:‘中国’ 这种汉字

cookie在http请求和响应中的形式

在请求header中是:cookie 首部
在响应中是set-cookie首部

cookie的语法规则

1、数据部分是名值对,k=v
2、控制部分:过期日期、域、路径、端口、版本、安全选项。各个部分用分号分开,不区分大小写

过期日期:max-age:10(秒为单位) 或者 expires=wed,21-dec-2015 11:11:11 gmt,max-age表示最大存活多长时间,过了这个时间浏览器会吧这个cookie删掉,expires超时时间,到了这个时间点会被删掉,max-age是个相对的时间,expires是个绝对的时间点,当这两个同时设置的时候max-age会覆盖expires设置

域: 设置这个cookie在哪个域可以访问到。在默认情况下,如果访问的页面是在 http://web0.com/a/test.jsp
那么这个cookie 就被设在了域web0.com下的/a路径下面,只有访问这个路径下的其他页面才会把cookie同时带到服务器。但是可以改变这个默认的设置,可以设置为其他的路径,这样在其他路径下的页面也可以访问到这个cookie,一般相同域名下,子域子路径可以读到父域父路径下设置的cookie。不能将cookie设置到其他域名中,比如你不能设置一个cookie到 baidu.com 下,这不会有任何效果。
安全选项,secure 指的是这个cookie要不要再https安全连接下传输,默认是false,不需要,如果设为了true,这个cookie必须是在https下才会传输到服务端,否则不会传输。

cookie在java中的表示

  1. CookieHandler 就相当于浏览器中的cookie管理,他可以接受存储cookie,cookie超时了会删掉,但是CookieHandler 只提供了一些api,并没有具体的cookie管理实现,CookieManager是真正的cookie管理实现类
    CookieHandler.setDefault(new CookieManager()) ,可以安装一个默认的cookie管理器。
  2. CookieStore 在正常情况下,浏览器中的cookie都是由服务器设的,但是我们可以在浏览器中用js的方法手动的来对cookie进行CRUD,所以java也提供了类似的管理接口,就是CookieStore,我们可以通过cookiestore来管理cookie,比如在java程序启动的时候手动的设置一些cookie进去,可以将cookie持久化到本地,然后在下次启动程序的时候重新载入到cookiemanager。

你可能感兴趣的:(java 模拟浏览器的cookie管理机制)