Cookie和Session使用步骤
Cookie的基本使用
发送Cookie
//1.创建Cookie对象,设置数据
Cookie cookie = new Cookie("key", "value");
//2.使用response对象,发送Cookie到客户端
response.addCookie(cookie);
获取Cookie
//1.使用request对象获取客户端所携带的所有cookies
Cookie[] cookies = request.getCookies();
//2.遍历Cookie对象数组,获取每一个Cookie对象,然后用Cookie对象的方法获取数据
for (Cookie cookie : cookies) {
//获取键名
String name = cookie.getName();
//获取键值
String value = cookie.getValue();
}
Cookie原理
Cookie是基于HTTP协议实现的,当从服务器端向客户端发送了一个Cookie对象时,Web服务器会将set-cookie:name=yang写入http协议的响应头中,而浏览器在解析http协议时发现了这一行代码,就会自动将Cookie值存在本地。而当浏览器向服务器发送请求时,会自动携带该域的所有Cookie数据,即将所有cookie数据写入http请求头中,格式是cookie:name=yang;orther=whatever。
Cookie细节
cookie的存活时间为直到浏览器关闭,因为cookie是存在浏览器的内存中,关闭浏览器内存会被释放。使用setMaxAge(int seconds)可以设置cookie的存活时间:
- 设置为正数时,会将cookie写入硬盘持久化存储,到了设定时间就会被删除
- 设置为负数时(默认),存入内存,随着浏览器关闭而释放。
- 设置为零时,浏览器会删除该cookie
另外,cookie是不支持存储中文的,需要使用URL编码的方式:
//编成字节码就可以存入cookie
String value = URLEncoder.encode("煤球", "UTF-8");
//获取cookie时就需要将字节码解码成中文
String value = cookie.getValue();
value = URLDecoder.decode(value, "UTF-8");
Session基本使用
- 获取Session对象
HttpSession session = request.getSession(); - Session对象方法:
- 存储数据到Session域中:
void SetAttribute(String name, Object o); - 根据key获取值:
Object getAttribute(String name); - 根据key删除该键值对:
void removeAttribute(String name);
存储Session
HttpSession session = request.getSession();
session.setAttribute("name", "yt");
获取Session
HttpSession session = request.getSession();
Object name = session.getAttribute("name");
Session原理
Session是基于Cookie实现的,创建一个新的Session对象时,Tomcat web服务器会自动发送一个Cookie,里面存放着对应这个Session对象的唯一标识符JSESSIONID,即在响应头中写入set-cookie:JSESSIONID=1245A5。而当浏览器发送请求时,会自动把cookie携带在请求头里:cookie:JSESSIONID=1245A5,然后web服务器在执行HttpSession session = request.getSession()时,会查找web服务器中存储的id是否有与cookie中对应的id,如果有则会取出对应的session数据,否则新创建一个。
Session使用细节
- Session钝化,指在服务器正常关闭后,Tomcat服务器会自动将Session数据写入硬盘的文件中
- Session活化,指再次启动服务器后,服务器程序会自动从文件中加载数据到Session中
- 所以,服务器的重启不会丢失Session数据
- 该文件在关闭服务器是,tomcat会将其存入work目录中的SESSIONS.ser文件中,重启服务器并加载了数据后会将其删除。
Session在默认情况下,如果不进行任何操作,会在30分钟时自动销毁。Session也可以手动被销毁,即利用Session.invalidate()方法。

浙公网安备 33010602011771号