会话技术
概念
- 浏览器和服务器开始交互到交互结束,中间做的事情
cookie客户端技术
- localstorage 数据存在域浏览器
- sessionstorage 页面关闭后就从浏览器删除了
- cookie 唯一能和服务端交互
服务端向客户端添加cookie
- Cookie ck = new Cookie(“ckname”,“tom”)
- response.addCookie(ck)
服务端获取客户端指定的cookie
- Cookie[] cookies = new Cookie();
- Cookie cookie = CookieUtil.getCookieByName(cookies,“ckname”);
- cks.getName 获取cks的名字
- cks.getValue 获取cks的值
- cks.setMaxAge(60) 设置cookie的生命周期为60秒把cookie从内存持久化到硬盘,到期后自动删除,参数为0l表示立即把cookie删除,负数为默认参数,表示浏览器关闭,cookie从内存中消失
存取中文数据
- tomcat从1.8以后可以存中文,但是中文不能有特殊的字符,如空格
- 存:Cookie cookie = new Cookie(“ckname”,URLEncoder.encode("你好“),"utf-8);
- 取:String value = cookie.getValue();
- String decode = URLRecoder.decode(value,“utf-8”)
cookie 的特点:
- 存在客户端的技术
- 4kb,数量20
- tomcat1.8之后支持中文,但是特殊符号需要编码和解码处理
设置路径cookie共享问题
- setPath(”/路径“) 表示只能被该路径下的资源访问cookie
- setPath(”/“) 表示能被localhost:8080下的所有的资源访问cookie
代码
- 工具类
public class CookieUtils {
private CookieUtils(){}
public static Cookie getCookieByName(String CookieName, HttpServletRequest request){
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if(CookieName.equals(cookie.getName())){
return cookie;
}
}
return null;
}
}
- 显示上次登陆时间
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
Cookie ck = CookieUtils.getCookieByName("lasttime", request);
PrintWriter pw = response.getWriter();
if(ck==null){
pw.print("这是您第一次访问");
}else {
String time = ck.getValue();
long tl = Long.parseLong(time);
String t = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(tl));
pw.print(t);
}
Cookie cookie = new Cookie("lasttime", System.currentTimeMillis() + "");
cookie.setPath("/");
cookie.setDomain("localhost");
cookie.setMaxAge(60*60*24*365*20);
response.addCookie(cookie);
}
session
- 客户端技术,驻留在服务器的内存中
session 的获取
- HttpSession session = request.getSession();
生命周期
- 一次会话多次请求中有效
原理
- 浏览器每次将cookie中的JSESSIONID传给服务器,然后去服务器的内存中找对应的session数据
- 浏览器关闭了,session还存在吗?
不对,浏览器关闭了服务器中的session还在,但是浏览器器中的JSEESIONID默认情况下浏览器关闭就没了,当重新打开浏览器再次访问服务器的时候只会重新创建一个Session。如果想要让两次获取到的session是同一个,可以修改保存在浏览器的JSESSIONID的maxAge的值,来延长cookie的生命周期 - 服务器重启后原来的sesssion还在吗?
正常关闭tomcat的时候,会把所有内存中的session写入到硬盘中的文件,这个操作叫做(序列化/钝化/写入)
当再次启动tomcat的时候,会把硬盘中的session读取到内存。这个操作叫做(反序列化/活化/读取)
3. session默认30分以后销毁
session的特点
- 存在服务器端
- 没有大小的限制
session和cookie的区别
- session存在服务器,cookie存在客户端
- session没有大小限制,cookie有4k
- session安全,cookie不安全
- session基于cookie