在将了解cookie和session之前需要先理解什么是会话。

一、会话

会话:用户打开一个浏览器,点击多个超链接,访问多个web资源后关闭浏览器,整个过程叫做会话。

二、为什么要使用cookie和session?

http协议是无状态的,一旦数据交换完毕,客户端和服务器端的连接就会关闭,再次交换建立新的连接。也就是说,服务器无法跟踪会话,而cookie和session就是用来解决这种问题的。

cookie是客户端的技术,程序将每个用户数据以cookie的形式写给用户各自的浏览器,当客户端再次访问服务器时会带着各自的cookie过来,这样服务器就能处理各自的用户数据了。

3.1 如何使用cookie?

Cookie cookie = new Cookie("name", "value");  
cookie.setPath("/");        //cookie记得一定要设定路径,默认是当前路径,设置/代表整个web应用  
cookie.setMaxAge("");       //设置有效期限,默认是浏览器的进程  
response.addCookie(cookie); //添加cookie,这样才能回写给客户端  

四、什么是session?

session是服务端的技术,当浏览器第一次访问web资源时,服务器会自动为其创建一个session,并保存在服务器。当需要保护用户数据的时候,可以将数据写入到session中。当用户访问其他程序时,就可以直接从session中取值。值得一提的是,session是在cookie的基础上创建的。

4.1 session实现原理

session的实现原理是建立在给浏览器回写cookie,并且以JSESSIONID为键。但这个键是没有时间的,也就是说,当你关闭浏览器时,代表一个会话结束了,也就是你的session会被删除。当你再次访问服务器时,服务器会为你重新创建一个session。

4.2 session的使用

1) 客户端不禁用cookie的情况

HttpSession session = request.getSession();  //客户端访问服务器时,服务器会自动创建一个session  
String sessionId = session.getId();  
Cookie cookie = new Cookie("JSESSIONID", sessionid);  
cookie.setPath("/");  
cookie.setMaxAge(30*60);  
response.addCookie(cookie);  
session.setAttribute("key", "value");  

2)客户端禁用cookie的情况
如果客户端禁用cookie,那么就需要调用response的encodeURL("转发的地址")

HttpSession session = request.getSession();  
String url1 = response.encodeURL("XXXX");     //注意:在调用这个方法前,必须先获取session  
PrintWriter pw = response.getWriter();  
pw.write(url1);  

© 2017. All Rights Reserved.

博主的邮箱axaaxaa@163.com