什么 Session?
指用户用一个浏览器,访问某个网站只要不关闭浏览器,不管用户点击多少个超链接,直到用户关闭浏览器,整个这个过程我们称为一次会话。
1 2 3 4 5 6 7 8 9
| HttpSession session = request.getSession();
session.setAttribute("name", "gavin"); session.setAttribute("pwd", "123456");
session.getAttribute("name");
session.removeAttribute("name");
|
Session 的生命周期,可以去 conf/web.xml
配置,也可在项目下的 web.xml
配置,代码里面也可以设置。
1 2 3 4
| session.setMaxInactiveInterval(100);
session.invalidate()
|
服务器为每个浏览器提供单个 Session 服务的原理:
- 第一次访问 web 应用时,会创建一个 Session 服务,然后给浏览器返回一个 cookie 里面包含了 Session 的 ID
- 第二次访问 web 应用时,cookie 里的 id 会随请求行发给服务器,服务器就能找到 ID 对于的 Session
Session 案例:
- 验证用户合法性
- 输入验证码的验证
- 简单的购物车
【验证码案例】(Java 绘图技术)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| response.setDateHeader("Expires", -1); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache");
response.setHeader("Content-Type", "image/jpeg");
BufferedImage image = new BufferedImage(50, 20, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); g.setColor(Color.BLACK); g.fillRect(0, 0, 50, 20); g.setColor(Color.WHITE); g.setFont(new Font(null, Font.BOLD, 20));
String s = getString();
request.getSession().setAttribute("code", s);
g.drawString(getString(), 0, 20);
ImageIO.write(image, "jpg", response.getOutputStream());
|
1 2 3 4 5 6 7 8
| private String getString() { Random r = new Random(); String s = ""; for (int i = 0; i < 4; i++) { s += r.nextInt(10); } return s; }
|