一、cookie
1.cookie的出现
- 在浏览器发送不同请求时,服务器端基于HTTP协议无法识别多次请求是否来自同一个浏览器。
2.cookie的概念
- Cookie是服务器发给客户端(一般是浏览器)的一小段文本,保存在浏览器所在客户端的内存或磁盘上。
- 一股来说, Cookie 通过HTTP Headers从服务器端返回到客户端,首先,服务器端在响应中利用Set-Cookie header来创建一个Cookie,然后,客户端在它的请求中通过Cookie header 包含这个已经创建的Cookie,并且把它返回至服务器,客户端会自动在计算机的Cookie文件中添加一条记录。客户端创建了一个Cookie 记录后,对于每个针对该网站的请求,都会在Header中带着这个Cookie。不过,对于其他应用的请求,Cookie是不会一起发送的。 服务器可以从客户端读出这些Cookie, 通过Cookie, 客户端和服务器端建立起一种联系。
- 也就是说,Cookie 是一种可以让服务器对客户端信息进行保存和获取的机制,从而大大扩展了基于Web的应用功能。
3.Cookie有效性
①分类
[1]会话级Cookie:保存在浏览器内存中,随着浏览器关闭的关闭而释放,默认情况
[2]持久化级Cookie:保存在文件系统中,不会随着浏览器关闭而释放,但到达预先指定的时间就会自动释放
②设置
cookie.setMaxAge(int seconds);
[1]seconds正整数:表示将Cookie设置为持久化Cookie,保持seconds秒
[2]seconds=0:表示删除Cookie
[3]seconds负整数:表示将Cookie设置为会话级Cookie
注意:设置完成以后,必须使用response的addCookie()添加才可生效
4.运行机制
①“创建Cookie对象
Cookie cookie = new Cookie("myCookie", UUID.randomUUID().toString());
②将Cookie对象中封装的信息回送到浏览器
API:response.addCookie(cookie);
以响应消息头的形式发送给浏览器
Set-Cookie:myCookie=5691a6b4-7441-4916-b319-1a04c31ec504
③浏览器请求服务器时携带Cookie数据
以请求消息头的形式携带Cookie数据
Cookie:myCookie=5691a6b4-7441-4916-b319-1a04c31ec504
④服务器从请求对象中获取Cookie数据
//从request对象中能够获取到Cookie信息,返回的是Cookie的数组
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer = response.getWriter();
Cookie[] cookies = request.getCookies();
//cookies数组不一定有值,如果浏览器没有提交Cookie数据,则cookies的值就等于null
if(cookies != null) {
for(int i = 0; i < cookies.length; i++) {
String name = cookies[i].getName();
String value = cookies[i].getValue();
writer.write("Cookie中的数据是:"+name+"="+value);
writer.write("<br />");
}
}
二、session
1、Session 概述
Session也是一个域对象,可以在自身的属性域中保存数据,在一定范围内共享。
2、Session的工作机制
-
并不是浏览器一访问服务器就创建Session对象,而是只有在服务器端调用request.getSession()方法时,Tomcat服务器才会“创建”Session对象。
-
request.getSession()方法
(1)请求中没有携带任何有关Session的标识,往往就是浏览器第一次访问的时候。
(2)请求中没有携带任何有关Session的标识:Tomcat会创建一个Session对象,并创建一个特殊的Cookie,这个特殊Cookie的name属性是JSESSIONID,值是一个唯一值,而且是随机生成的。将这个JSESSIONID Cookie作为关联这个Session对象的标识写回浏览器。
(3)请求中携带了JSESSIONID时,Tomcat会在已经创建好的Session对象的集合中,查找匹配的Session对象。实现多个请求识别浏览器的身份的目的。
①能找到:返回找到的Session对象
②找不到:创建一个新的Session对象返回.通常由于服务器超时释放。
即:我们是通过JSESSIONID的值找到的session对象。 -
isNew()返回boolean标识当前Session对象是新创建的,还是原有的
-
getId()返回当前Session对象的JSESSIONID值
3、Session的时效管理
Session代表浏览器和服务器之间的一次会话,本来应该在会话开始时创建,会话结束时释放。但是浏览器关闭时,服务器根本检测不到,那就只能由服务器自己设置一个时间了。
[1]自然超时
< 1>Tomcat配置文件中web.xml中有默认的超时时间的配置
< session-config>
< session-timeout>30</session-timeout>
< /session-config>
Session对象默认的有效时间是30分钟,指的并不是Session对象从创建开始30分钟后过期,而是从最后一次访问开始,30分钟后失效。
< 2>调用Session对象的方法手动设置超时时间
session.setMaxInactiveInterval(10)。以秒为单位
[2]手动调用invalidate()方法直接失效
4、项目阶段
登录成功,记录浏览器信息
1)显示登录用户
//将用户信息保存到Session对象中,到JSP页面中就可以通过Session隐含对象将数据读取出来
HttpSession session = request.getSession();
session.setAttribute("loginUser", userName);
2)退出操作
String method = request.getParameter("method");
if("logout".equals(method)){
HttpSession session = request.getSession();
session.invalidate();
response.sendRedirect(request.getContextPath()+"/index.jsp");
return;
}