IT Notes‎ > ‎Java‎ > ‎Java Web / Java EE‎ > ‎Tips of Java Web / EE‎ > ‎

Session and Cookie

在使用 Servlet/JSP 中,Session 和 Cookie 是非常重要的概念。由于 HTTP 无法保存会话状态,所以 session 和 cookie 应运而生。Session 将信息保存到 Web 服务器上,而 Cookie 则将信息存放到本地。

 Session
 Cookie
 类型 interface javax.servlet.http.HttpSession
 class javax.servlet.http.Cookie
 存在位置 server client(browser)
 创建方式 request.getSession(true) new Cookie(String, String)
 存放值 HttpSession.setAtrribute(String name, Object value) new Cookie(String name, String value), Cookie.set(String newValue)
 读取值 Session 对象从 request.getSession(true) 获取,上面一行存放的值从 Session 对象中 getAtribute 即可。
 Cookie 对象从 request.getCookies() 中得到,Cookie 中的值可以通过遍历这个对象得到。
 存在时间 HttpSession.setMaxInactiveInterval(int interval) 设置最大空闲时间,interval 以秒计算。负数,就是永不过期,0,全部过期。

这里设置的是发呆时间。
 Cookie.setMaxAge(int expiry),其中 expiry 以秒计算。正数,即最大的存在时间,0,销毁,负数,不存储该 cookie.

这里设置的是从创建开始算起的存放时间。
 应用实例
  1.  网站在用户登录后保存用户信息到 session,用于网页的访问权限控制。
  2. 购物车中的信息。
  1.  保存用户登录信息。
  2. 记录用户使用该网站的习惯。
 安全性 高 低
 使用注意 它会增加服务端的压力,能不用尽量不要用。 明文存放,如果涉及密码,是需要加密存放的,或者别的方式。

Cookie 从服务端发送到客户端,通过 response.addCookie 添加;客户端取得返回 Cookie 值,通过 request.getCookies() 得到。一般约定,cookie 的尺寸不超过 4KB, 每个网站不超过 20 个 Cookie, 一个浏览器最多支持 300 个 Cookie。

再深入一点。Cookie 分为内存 cookie 和普通的存入硬盘的 cookie. Session 是通过内存 cookie 实现的。具体实现机制再考 TODO
Comments