- 一、Cookie
- 1.1 介绍
- 1.2 方法
- 1.3 浏览器cookie
- 1.4 练习
- 二、Session(重点)
- 2.1 介绍
- 2.2 session与cookie区别
- 2.3 方法
- 2.4 会话自动过期:web.xml配置
- 2.5 练习
学习视频来自于:秦疆(遇见狂神说)Bilibili地址
他的自学网站:kuangstudy
我们缺乏的不是知识,而是学而不厌的态度
一、Cookie 1.1 介绍
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
1.2 方法Cookie[] cookies = req.getCookies(); //获得Cookie
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户端一个cookie
1.3 浏览器cookie
一个网站cookie是否存在上限
- 一个Cookie只能保存一个信息。
- 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie。
- Cookie大小有限制4kb。
- 300个cookie浏览器上限
删除Cookie - 不设置有效期,关闭浏览器,自动失效。
- 设置有效期时间为 0 。
编码解码
使用cookie存取中文出现乱码,存入前编码,取出解码。
URLEncoder.encode("秦疆","utf-8")
URLDecoder.decode(cookie.getValue(),"UTF-8")
1.4 练习
记录用户上一次登录时间
// 解决页面中文乱码
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
// 获取向页面发送数据的对象
PrintWriter out = resp.getWriter();
// 获取浏览器上传cookie
Cookie[] cookies = req.getCookies();
// 判断cookies不为null
if (cookies != null) {
// 找到自己需要的cookie
for (int i = 0; i < cookies.length; i++) {
String name = cookies[i].getName();
if (name.equals("time")) {
// 获取到上一次的时间
String datetime = cookies[i].getValue();
// 处理格式
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
String format1 = format.format(Long.parseLong(datetime));
// 页面打印
out.println("上一次的登陆时间:" + format1);
}
}
}
// 创建cookie,写入当前时间
Cookie cookie = new Cookie("time", String.valueOf(System.currentTimeMillis()));
// 设置cookie保存时间
cookie.setMaxAge(24 * 60 * 60);
// 发送到浏览器
resp.addCookie(cookie);
}
二、Session(重点)
2.1 介绍
Session对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。
2.2 session与cookie区别- Cookie是把用户的数据写给用户的浏览器,浏览器保存 (可以保存多个)。
- Session把用户的数据写到用户独占Session中,服务器端保存 (保存重要的信息,减少服务器资源的浪费)。
- Session对象由服务创建。
- Session本质是服务器创建对象,通过Cookie将SessionID传递到浏览器,用户每次访问携带SessionID,这样Session始终不变。
HttpSession session = req.getSession();//得到Session
setAttribute("name",new Person("admin",123));//给Session中存东西
session.getId();//获取Session的ID
session.isNew()//判断Session是不是新创建
session.getAttribute("name");//得到Session中存的数据
session.removeAttribute("name");//删除Session中指定数据
session.invalidate();//手动注销Session
2.4 会话自动过期:web.xml配置
2.5 练习15
通过不同浏览器访问,查看不同会话的SessionID
// 解决乱码
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
// 获取Session
HttpSession session = req.getSession();
// 给Session存入信息
session.setAttribute("name","天宇");
// 获取Session的ID
String id = session.getId();
// 向页面输出信息
PrintWriter writer = resp.getWriter();
// 判断Session是不是新创建的
if(session.isNew()){
writer.write("session创建成功,id:"+id + "name:"+session.getAttribute("name"));
}else {
writer.write("session已服务器中存在,id:"+id + "name:"+session.getAttribute("name"));
}
清空session
HttpSession session = req.getSession(); session.invalidate();



