为什么要有会话?
服务端同时接收大量的客户端请求,如何来区分哪些请求来自于同一个会话?能识别出来自同一个客户端的访问请求,这就需要客户端对其发出的每个请求进行标识,属于同一个会话中的请求都有相同的标识号,这就是 sessionID。
让服务端通过获取Cookie里的JSESSIONID,来区分不同的客户端。防止出现数据错乱,例如:张三的商品不能加到李四的购物车里面。
session
setAttribute
getAttribute
removeAttribute
invalidate //设置 session 失效,当用户执行退出登录时,调用该方法
session 常用方法:
-
String getId() //获取sessionID
-
void setMaxInactiveInterval(int interval) //设置 session 失效时间,单位是秒
-
int getMacInactiveInterval() //获取 session 时间
-
void setAttribute(String key,Object value) //在 session 中以键值对的形式存储数据
-
Object getAttribute(String key) //通过 key 值获取 session 中保存的数据
-
void removeAttribute(String key) //通过 key 值移除 session 中保存的数据
实际开发中,普通的业务数据传递一般选择 request,需要结合转发完成资源的跳转。登录成功之后的用户信息,一般选择 session的ConcurrentHashMap<K, V>集合属性,无论是转发还是重定向,没有区别,都可以从 session 中取出数据。
<%
//多个页面访问session.jsp, sessionId相同。不同浏览器,sessionId不相同。
String sessionId = session.getId();
int timeout = session.getMaxInactiveInterval(); //默认1800秒。
session.setMaxInactiveInterval(1000);
timeout = session.getMaxInactiveInterval();
%>
<%=timeout%> <!--1000-->
面试题:浏览器关闭,session就销毁了? NO!
- 我们知道Session是存在于服务器端的,当把浏览器关闭时,浏览器并没有向服务器发送任何请求来关闭Session,自然Session也不会被销毁,但是可以做一点努力,在所有的客户端页面里使用js的window.onclose来监视浏览器的关闭动作,然后向服务器发送一个请求来关闭
Cookie
安全性不好,因为他是由Server端产生,存在于浏览器中,在浏览器安装目录Cookie文件下可见。
而session是存在于Server端的。
-
void setMaxAge(int age) 设置 Cookie 的有效期,以秒为单位
-
int getMaxAge() 获取 Cookie 的有效期,默认-1 表示一直存在。
-
void setValue(String value) 修改 Cookie 的 value 值
-
String getName() 获取 Cookie 的 name 值
-
String getValue() 获取 Cookie 的 value 值
cookie.jsp:
Cookie cookie = new Cookie("name","zhangsan");
response.addCookie(cookie);
session.setAttribute("cookie",cookie);
//重定向方式,看到的效果明显。
response.sendRedirect("index.jsp");
注意:Cookie中不能存中文。
index.jsp:
Cookie cookie = (Cookie) session.getAttribute("cookie");
cookie.setValue("lisi");
response.addCookie(cookie);
out.write(cookie.getName()+"="+cookie.getValue());// name=lisi
Session 和 Cookie 的区别
Session 和 Cookie 的联系是通过JSESSIONID,用火狐测。
Session 保存在服务端,Cookie 保存在客户端。
Session 存储的数据类型 Object,Cookie 只能存储 String
Session 会随着会话的结束而销毁,Cookie 可长期保存在客户端浏览器中
Session 保存重要信息,Cookie 保存不重要的信息