略
Cookie
存在于浏览器中的一小段 数据,可用于保存用户名,请求时可以通过request传到服务器,服务器可以获取到Cookie的数据,并处理它,然后可以通过response响应,可以根据cookie的不同来做成不同的响应.
但是Cookie并不安全,它是存在于浏览器的数据,用户可以直接接触到,从而导致不安全,一般需要进行加密处理.
Cookie的API
构造方法
Cookie(String name,String value)
Cookie数据存储是k-v方式的.
其他方法
getName()
得到名字getValue()
得到值setDomain()
设置有效域名setPath()
设置有效路径setMaxAge()
设置有效时长
添加Cookie
1 | Cookie cookie = new Cookie("remember","hello");//key=remember,value=hello |
删除Cookie
cookie并没有方法可以直接删除,可以写一个同路径,同名的Cookie,有效时长设置为0,返回给浏览器的Cookie在0秒后就删除.
1 | Cookie cookie = new Cookie("remember",""); |
服务器获取Cookie
EL表达式
1
${cookie.get("remember").value}
Java代码
1
2
3
4
5
6
7
8
9
10
11
12
13<%
String str = "";
Cookie[] cookies = request.getCookies();
if (cookies!=null){
for (Cookie cookie : cookies) {
if (cookie.getName().equals("remember")) {
str = cookie.getValue();
}
}
}
%>
<%=str%>
request 获取的是Cookie数组,想要特定的Cookie需要遍历,通过name找到该Cookie.
Session
用于服务器端的数据保存,是一次会话,会话在用户第一次请求开始,在用户关闭浏览器结束,但是Session并不会在服务器端立刻被销毁而是等待一段时间(Tomcat默认为30分钟),如果等待时间内,用户用同一个SessionID请求,即可重新唤起该Session.SessionID是一段cookie数据,Session技术的实现需要依赖于Cookie.Session是浏览器隔离的,不同浏览器的请求会有不同的会话产生于服务器后台,它们之间没有联系,不可数据传输.但是同一个Seesion下,可以实现数据传输.
Session使用
获得Session
1
HttpSession session = request.getSession();
很多地方可以获得Session,不要局限于使用request来获得.
保存数据
1
session.setAttribute("user", user);
k-v形式,不过value不同于Cookie的value,它可以传输Object类型的数据(Cookie仅仅可以存字符串),
取得数据
1
Object user = session.getAttribute("user");
同一Session下,可以用
getAttribute(key)
方法获得该数据.
范围总结
Request范围
- 创建于用户发送一次请求
- 销毁于服务器作出响应
- set/getAttribute(…)来存取数据
- 作用范围:一次请求
Session范围
- 创建于服务器端第一次调用getSession()方法的时候.
- 销毁于Session过期,非正常关闭服务器,手动调用session.invalidate();
- 存取数据与request类似
- 作用范围:一次会话(多次请求)
ServletContext范围
- 创建于服务器启动时期,一个web项目对应一个单独的ServletContext.
- 销毁于服务器关闭
- 存取数据与上面两个类似
- 作用范围:整个应用