一、Cookie与Session区别
Cookie | Session | |
---|---|---|
内置对象 | 否 | 是 |
保存位置 | 客户端 | 服务器 |
安全性 | 较不安全 | 较安全 |
保存内容格式 | String | Object |
有效范围 | 单个浏览器所属 写在JSP中,将会所有浏览器共享 | 同一浏览器不同页面共享 |
二、基本使用
1.Cookie
存储在本地,由浏览器管理。用来存储一些常用数据。
同一浏览器可访问。
在第三次握手中的最后一次,客户端会将对应Cookie同报文同时发给服务器端。
Cookie来自于javax.servlet.http.Cookie
主要方法:
public Cookie(string name,String Value)
cookie.setMaxAge();//最大有效期(秒)
String getName()
String getValue()
服务端
Cookie cookie = new Cookie("name","zs");//建议使用英文,避免编码问题
cookie.setMaxAge(10);//最大有效期10s
response.addCookie(cookie);//添加至响应中
response.sendRedirect("目标网址");//通过重定向返给客户端
客户端
获取Cookie是一次性获取当前域名的所有Cookie,因此需要遍历来比较。
<%!
String uname;
%>
<%
Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies){
if(cookie.getName().equals("uname")){
uname = cookie.getValue();
}
}
%>
注意:有些浏览器默认记住用户名一类,因此可能不好判断是否失效
2.Session
保存在服务器中,主要用于会话,存储其状态。
服务端产生session对象,每一个对象有一个唯一sessionID。同时生成一个jsessionID并通过Cookie(自动生成,不需要用户去创建)将jsessionID发送给客户端。jsessionID的值与即为sessionID的值。
在三次握手中的最后一次,客户端发送给服务端的cookie中包含jsessionID。服务器会匹配jsessionID,无匹配对象则为第一次访问,有匹配则不为第一次。
同一用户可在同一浏览器的所有页面通过请求服务器,访问session内容。
session为内置对象。
主要方法
String getId()
boolean isNew()
void invalidate()
setAttribute()
getAttribute()
void setMaxInactiveInterval()最大有效非活动时间(秒)
服务端
<%
session.setAttribute("uname","zs");
request.getRequestDispatcher("目标页面").forward(request,response);
%>
转发或重定向都可以将jsessionID发给客户端
客户端
<%
String name = session.getAttribute("uname");
%>