常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
Cookie执行机制
1.当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器
2.服务器向客户端回传相应的超文本并在HTTP响应头(Response Header)里发回用户的个人信息。在响应头里面会有一个Set-Cookie字段,这是用来指示客户端建立一个cookie
3.客户端浏览器接收来自服务器的响应,并将这些信息存放在一个统一的位置,这个位置可能是内存也有可能是硬盘。
4.当客户端要再向服务器发送请求时,就会在HTTP的请求头里加入cookie(一小段的文本信息)
5.服务器就根据cookie来识别客户端的身份,从而动态生成与该客户端相对应的内容。
Cookie属性
String name
:cookie名称
Object value
:cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码。
int maxAge
:cookie的失效时间,单位为秒。如果为正数,则该Cookie在>maxAge秒之后失效,这时无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1。
boolean secure
:该cookie是否使用安全传输协议,默认为false
String path
:cookie使用路径。如果设置为/sessionWeb/
,则只有contextPath为/sessionWeb
的程序可以访问该Cookie。如果设置为/
,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为/
。
String comment
:cookie用处说明
int version
:cookie版本号
String domain
:可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie
Cookie的不可跨域名性
例如,Google会向客户端颁发Cookie,Baidu也会向客户端颁发Cookie。浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。Google与Baidu的域名不一样,因此Google不能操作Baidu的Cookie。
正常情况下,同一个一级域名下的两个二级域名如www.helloweenvsfei.com和images.helloweenvsfei.com也不能交互使用Cookie,因为二者的域名并不严格相同。如果想所有helloweenvsfei.com名下的二级域名都可以使用该Cookie,需要把Cookie的domain参数设置成.helloweenvsfei.com
Cookie的修改、删除
修改:新建一个同名的Cookie,添加到response中覆盖原来的Cookie。
删除:新建一个同名的Cookie,将maxAge设置为0,并添加到response中覆盖原来的Cookie。
注意:修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖。