1 什么是会话
用户开一个浏览器访问某个网站, 点击多个链接, 访问服务器多个 web 资源, 然后关闭浏览器, 整个过程称之为会话, 与打电话类似会话过程要解决一些问题,
每个用户在使用浏览器与服务器进行会话时, 会产生一些数据, 服务器需要为每个用户保存这些数据 Servlet 保存会话信息的技术有: session 与 cookie
2 cookie
为什么需要 cookie 技术
登录网站时显示用户最后一次登录时间, 不同的用户显示的最后一次登录时间不同;
访问购物网站时, 如何保存用户曾经浏览过的商品, 并且显示给用户;
登录网站时, 显示需要保存登录信息多久;
什么是 cookie
cookie 是客户端技术, 服务器端把每个用户的信息 (登录名, 密码等) 以 cookie 的形式保存在客户端的浏览器缓存目录下的, 在需要的时候可以从客户端读取
cookie 工作流程
cookie 使用
cookie 像一张表, 分两列, 一个是名字, 一个是值, 数据类型都为 String
cookie 的创建与读取
- // 创建 Cookie 对象
- Cookie cook = new Cookie("name","latiny1");
- // 设置 Cookie 生命周期
- cook.setMaxAge(3600);
- // 将 cook 返回给浏览器
- response.addCookie(cook);
- // 读取 Cookie
- Cookie[] cookies = request.getCookies();
cookie 的特点
cookie 是在服务器端创建的;
cookie 是保存在浏览器端的(客户端);
cookie 可以被多个浏览器共享;
cookie 重名会覆盖掉之前的 cookie, 只有最后一个有效;
cookie 存放时以明文的形式存放, 因此安全性比较低;
一个浏览器最多放 300 个 Cookie, 一个站点最多放 20 个 cookie, 一个 cookie 大小限制在 4K
Cookie 默认的生命周期是会话级别 (浏览器关闭时, cookie 就会被一起删除); 通过 setMaxAge() 可以设置生命周期, 设置为 0 或者负数时, 代表清除客户端的 cookie
3 session
为什么需要 session
如何实现在不同的页面可以查看信息(如购物车), 不同的用户看到的信息不一样
什么是 session
Session 是服务端技术, 服务器在运行时可以为每个用户的浏览器创建一个独享的 session 对象, 由于 session 为用户浏览器独享, 所以用户在访问服务器资源时, 可以把各自的数据放在各自的 session 中, 当用户再去访问服务器中的其他 web 资源时, 其他 web 资源再从用户各自的 session 中取出数据为用户服务
session 的特点
session 是放在服务器内存中的;
一个用户浏览器独享一个 session 域对象;
session 生命周期指的从最后一次访问或者操作 session 时计算, 默认为 30minutes, 可以通过 web.xml 修改;
a. 修改 tomcat/cnf/web.xml 修改, 对所有 web 应用生效
- <session-config>
- <session-timeout>30</session-timeout>
- </session-config>
b. 修改自己项目的 web.xml 文件
- <session-config>
- <session-timeout>1</session-timeout>
- </session-config>
如果两边配置不一致, 则以自己项目配置为准
c. 在代码里设置
- // 设置 session 的有效时间, 从最后一次使用开始计算
- session.setMaxInactiveInterval(60);
session 失效指的整个 session 失效, 而不只是 session 的某个属性失效; 通过函数 se.invalidate() 强制整个 session 失效, 通常用于安全退出; 设置 session 某个属性失效, se.removeAttribute("name"); 重启 tomcat,reload web 应用, 关机等操作, session 都会失效;
session 的使用
获取创建 session
- // 获取 session
- HttpSession se = request.getSession();
- se.setAttribute("name","latiny");
使用 session
- // 获取使用 session
- HttpSession se = request.getSession();
- String name=(String)se.getAttribute("name");
session 实际应用
a. 网上商城购物车
b. 保存用户登录信息
c. 放入某些需要的信息供同一个用户的各个页面使用
d. 防止用户非法登录到某个页面
禁用 Cookie 之后怎么实现购物车功能(购物车要通过 session 来实现, 而 session 的信息的传递需要 cookie 协助), 使用 encodeURL
a. 在发送页面加入以下代码
- // 访问以下 session
- request.getSession();
- String url = response.encodeURL("/ShopCart/BookHandle?id="+book.getId());
b. 在接受页面对 url 使用 encode
- String url = response.encodeURL("/ShopCart/ShowBook");
- out.println("<a href="+url+">返回商品页面</a></br>");
4 Session 与 Cookie 总结
存储位置不一样
Cookie 存在客户端浏览器的临时文件下
Session 存在服务器端的内存中, 一个 session 域对象为一个用户浏览器服务
安全性
Cookie 以明文方式存放在客户端的, 安全性较低; 可以通过加密算法加密之后再存放 MD5
Session 存放在服务器内存中, 安全性高
网络传输量
Cookie 会传递信息给服务器
Session 的属性值不会给客户端
生命周期
Cookie 生命周期是累计的, 从创建时就开始计时, 例如它的生命周期为 30 分钟, 则从创建时开始计时, 30 分钟后失效
Session 生命周期是间隔时间, 即从用户最后一次访问 session 开始计时, 例如它的生命周期为 30 分钟, 则 30 分钟内没有用户访问, 它才会失效关闭 tomcat;reload web 应用; 时间到; 调用 invalidate 方法
访问范围
Session 为一个用户浏览器独享
Cookie 为多个用户浏览器共享
使用原则
因为 Session 会占用服务器内存, 因此尽量少使用 session, 不要在 session 存放过多过量的数据, 会影响性能
来源: http://www.bubuko.com/infodetail-2501225.html