一篇文章搞懂会话对象---Cookie
1、会话对象的简述
用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。在会话对象过程中,存在两个重要的技术:
- Cookie
Cookie翻译成中文是小甜点,小零食的意思,存在于客户端,其实Cookie就是一个键和一个值构成的,随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来后,当下一次再访问服务器时把Cookie再发送给服务器。 - Session
Session是存在于服务器,服务器内存在一个session池,里面存放了sessionID,在运行时可以为每一个用户的浏览器创建一个其独享的session对象(sessionId),是域对象之一,它的范围是在一个会话范围内有效。
2、Cookie概述
- Cookie作用
Cookie是存在于客户端,是服务器保存在客户端的信息,在客户端下次请求是会把Cookie返回服务器,这样服务器可以根据传回的Cookie识别客户端,Cookie作用很大,但是再大也离不开“跟踪客户端状态”这句话。
3、Cookie示例
3.1.Cookie保存到客户端
将Cookie保存在客户端是response对象,属于响应工作,由于Cookie属于HTTP协议的内容,所以保存Cookie的方法是属于HttpServletResponse类。
1.void addCookie(Cookie c):
添加Cookie对象到当前response对象中,这个方法可以被调用多次,从而完成添加多个Cookie对象到response中。
Cookie cookie = new Cookie("username", "txjava");
response.addCookie(cookie);
通过浏览器的开发者工具我们可以看到,该请求的响应头中被添加了Set-Cookie的值:
3.2.服务器端读取Cookie
存储Cookie和读取Cookie比较
存储 | 读取 |
---|---|
addCookie() | getCookie() |
response | request |
HttpServletResponse | HttpServletRequest |
假如览器保存了Cookie,那么会在下一次请求时把Cookie放到请求头中发送给服务器,这时服务器需要在请求中读取Cookie。既然是在请求中读取,那么当然是使用request对象来读取了。
HttpServletRequest:Cookie[] getCookies()
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie cookie : cookies){
System.out.println(cookie.getName() +":"+ cookie.getValue());
}
}
4、Cookie生命周期
Cookie会在客户端存活多久呢?这就是Cookie的生命周期。
默认情况下,Cookie只在浏览器的内存中存活,也就是说,当你关闭浏览器后,Cookie就会消失!
==可以使用Cookie#setMaxAge(int expiry)来设置Cookie的存活时间。==例:
①cookie.setMaxAge(60*60):表示cookie对象可存活1小时。
②cookie.setMaxAge(-1):cookie的maxAge属性的默认值就是-1(其实只要是负数都是一个意思),表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失。
5、Cookie保存中文
Cookie中是不可以设置中文的,但可以使用URLEncodor.encode ()方法编码后在存放到Cookie中。在获取Cookie时,需要先使用URLDecoder.decode()方法解码,再使用。
添加cookie:
Cookie cookie1 = new Cookie("username", URLEncoder.encode(username,"UTF-8"));
读取cookie:
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie cookie : cookies){
if(cookie.getName().equals("username"))
username = URLDecoder.decode(cookie.getValue(),"UTF-8");
if(cookie.getName().equals("password"))
password = cookie.getValue();
}
}
6、Cookie的禁用
默认情况下浏览器的cookie是被启用的,但是其实我们是可以手动的禁用cookie的,强烈不建议禁用cookie;
Cookie一旦被禁用掉绝大多数互联网的网站都无法登录,这个跟我们后续要讲解的session有关。
那么我们如何通过程序来通过程序判断用户的浏览器上的cookie是否被禁用了呢,其实很简单,我们可以通过去刚刚添加的cookie,如果没有取到,说明cookie被禁用。