cookie简介
在登录某个网站时,比如登录163邮箱的网站,界面中有个十天免登陆的选项,先不勾选该选项,登录成功之后关闭浏览器或重启电脑,当再次访问163邮箱时会提示用户登录,这说明http协议是无状态的,在不同的请求之间是无法进行数据传递的。
而当勾选了十天免登陆的选项并登录成功之后,关闭浏览器或者重启电脑,之后再次访问163邮箱时就会自动登录了。这说明用户登录的一些信息保存到了该电脑的硬盘中(默认会存在浏览器的缓存中,可以设置保存在硬盘上),当访问163邮箱网站时,浏览器会将这些数据发送到服务器,从而实现了自动登录的功能,客户端电脑中用于保存这数据的资源,称为cookie。
用户在勾选十天免登陆的选项并登录成功之后,由服务器生成 Cookie,并将其封装到响应头中,以响应的形式发送给浏览器。浏览器接收到这个响应后,将 Cookie 保存到硬盘中。当浏览器再次发送同类请求后,在请求中会携带保存在硬盘的Cookie数据,发送到服务端,由服务器对解析该Cookie。
Cookie 技术并不是 JavaWeb 开发专属技术,而是属于 Web 开发的技术,是所有 Web 开
发语言均支持的技术。Cookie 是由若干键值对构成,这里的键一般称为 name,值称为 value。 Cookie 中的键值对均为字符串。
在web.xml中将上面的servlet的url-pattern设置为:/test/cookie01
访问该servlet时,在上图中,我们看到响应头中携带了之前设置的cookie信息。此时两个cookie与默认资源路径http://localhost:8080/wdy/test/cookie01 进行了绑定,也就是url-pattern中的上一级路径,当再次访问路径包含以上资源路径的url时,会自动将cookie放到请求头中向服务器发出请求。也就是在不同应用间cookie是不共享的。
手动设置cookie路径
设置完成后运行,发现路径变为/wdy/aaa了
这是我们随便访问一个路径/wdy/test/12,是不会有cookie传递的
我们用/wdy/aaa/12访问,是有cookie传递的
设置cookie的有效时长
默认情况下, Cookie 是保存在浏览器的缓存中的,关闭浏览器后Cookie也就消失了。
开发者可以通过设置Cookie的有效时长,将Cookie写入到客户端硬盘文件中。
可以通过下面的方法设置有效时长
public void setMaxAge(int expiry)
其中expiry的单位为秒,整型。
大于 0,则表示要将 Cookie 写入到硬盘文件中;
小于 0,则表示 Cookie 存放在浏览器缓存中,与不设置时长等效;
等于 0,则表示 Cookie产生后直接失效。
服务器端获取请求的cookie
在 HttpServletRequest 中有一个方法getCookies(),专门用于读取请求中所携带的 Cookie 数据,该方法的返回值类型是Cookie数组。
新建一个servlet:
网友评论