简单的总结Cookie,泛泛之谈的可以把Cookie理解为,Http协议的网络中,response响应包含特定Cookie到本地,request请求包含特定Cookie到服务器。
第一次请求一般不会包含特定Cookie。
HttpServletRequst类的getCookies()方法,返回一个Cookie数组,该数组包含了请求中的所有Cookie。如果没有包含任何Cookie,getCookies()方法返回null。
HttpServletResponse类的addCookie(Cookie)方法,添加一个Cookie到响应中去。
Cookie类:
该类有这样一个方法。setMaxAge(int expiry)方法中有一个int基本类型的参数expiry。它用于设置Cookie的有效期。该参数以秒为单位。例如:(60)为60秒,(60*60)为一小时。
该参数有三种情况:
1.如果expiry大于零,就指示浏览器在客户端硬盘上保存当前Cookie,有效期为expiry秒。
2.如果expiry等于零,就指示浏览器删除当前Cookie。
注意:当前Cookie指的是当前浏览器中的Cookie,删除时只会删除当前浏览器的Cookie,不会把保存在客户端硬盘上的Cookie删除掉。如果在有效期内,再打开一个新的浏览器依然可以获得到最初保存在客户端的Cookie,修改Cookie也是这样的原理,修改后只会修改到当前浏览器中的Cookie。
3.如果expiry小于零,就指示浏览器不要把Cookie保存到客户端硬盘。Cookie仅仅在当前浏览器进程中(其它浏览器进程无法访问到该Cookie)。但浏览器进程关闭,Cookie也随之消失。
###Cookie默认有效期为-1###
Cookie的共享范围问题:
改变Cookie的共享范围,可以用过Cookie的setPath(String path)和setDomain(String doamain)方法来达到不同的需求。
假设有两个服务器分别为S1和S2。在服务器S1中有两个应用app1和app2,服务器S2中有应用app3。
用户通过一个浏览器(同一个浏览器进程)来访问这3个app应用。
现在app1应用的一个Web组件在浏览器上保存了一个Cookie,默认情况下处于安全考虑只有app1应用可以访问该Cookie。如果希望改变该Cookie的共享范围,在app1应用的Web组件写该Cookie时通过上文提到的两个方法实现。
1.让app1应用所在服务器的所有应用共享:
app1应用的Web组件在写Cookie时:利用setPath(“/")给定参数“/”是app1应用所在服务器的根路径,因此app1应用所在服务器中的所有应用共享app1应用写入的Cookie。
2.只能让app1应用所在服务器的某个应用访问:
app1应用的Web组件在写Cookie时:依然是利用setPath("/app2/")给定参数“/app2/”中的app2可更换为任意指定可访问Cookie的应用名称。此时只有app2可以访问该Cookie就连app1自己此时也无法访问到。
3.只能让app1应用所在服务器的某个应用下的某个子路径下的Web组件访问:
app1应用的Web组件在写Cookie时:依然是利用setPath("/app1/sub/")给定参数“/app1/sub/”中的app1和sub可更换为任意指定可访问Cookie的应用路名称和子路径名称。此时只有app1下的sub子路径下的Web组件可以访问该Cookie就连app1顶层路径此时也无法访问到。
4.让其他服务器中的所有应用都可以共享:
app1应用的Web组件在写Cookie时:利用setDomain(".eugene.com")来实现。参数“.eugene.com”的意思是。假定要共享app1应用所写Cookie的服务器域名为“www.eugene.com”,此时参数就为上文方法所传参数(去掉www紧跟的“.”符号以前的字符串)。以上设置是的“www.eugene.com”服务器下的所有应用共享app1应用所写Cookie。
5.要让其他服务器下的某个应用访问:
app1应用的Web组件在写Cookie时:除了要利用setDomain(".eugene.com")来实现外,还必须利用setPath("/appX/")给定参数“/appX/”中的appX可更换为任意指定可访问Cookie的应用名称。