1、会话
用户打开浏览器,点击了很多超链接,访问了很多web资源,到关闭浏览器,这个过程都称之为一次会话。关闭浏览器会话结束
cookie
客户端、服务端
- 服务端给客户端一个信件,客户端下一次请求服务端时,会将cookie一起发送给服务端
- 服务端接收cookie,进行判断,找到需要的cookie(根据cookie的键查找)
2、保存会话的两种技术
cookie
- 客户端技术(响应、请求)
session
- 服务器技术,用来保存会话信息。可以把数据保存在session中
常见场景:保存登录信息
3、cookie
- 从请求中获取cookie数据
- 服务器响应给客户端cookie
Cookie[] cookies = req.getCookies(); //获得Cookie
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的值
Cookie cookie = new Cookie("LastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户端一个cookie
浏览器存储cookie数量:
- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie,最多存放20个
- cookie大小有限制(4kb)
- 浏览器存储cookie上限个数:300
删除cookie:
- 不设置有效期,关闭浏览器时自动删除
- 设置有效期时间为0时立即删除
生命周期:
setMaxAge()
- 正数:表示指定秒数后过期
- 负数:浏览器关闭时cookie删除(默认值是-1)
- 零:马上删除cookie
4、session
- 服务器会给每个用户(浏览器)创建一个session对象
- 一个session独占一个浏览器,只要浏览器不关闭,这个session就存在
- 用户登录后,整个网站都可以访问这个session
HttpSession session = req.getSession(); //获得session
session.setAttribute("name","MaybeBin-陈"); //给session存入信息
String id = session.getId(); //获得session的ID
if (session.isNew()) {} //判断session是不是新创建
resp.getWriter().write("sessionID = " + id);
生命周期:
-
invalidate():
调用方法使session立即失效
-
session-config配置:
<!-- 设置session的默认失效时间
当前web工程所创建的session失效时间都根据该配置实现-->
<session-config>
<!--1分钟后session自动失效,以分钟为单位-->
<!--session的时间不能太长,如果一旦太长,用户量大,服务器上全是session,导致服务器崩 -->
<session-timeout>1</session-timeout>
</session-config>
5、session和cookie的区别:
- session存储在服务器,cookie存储在用户的浏览器
- session数据安全,Cookie相对不安全
- session没有数据大小限制,而cookie有