Session
服务器会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中:HttpSession
- HttpSession对象:
- HttpSession
req.getSession()
- Objetc
getAttribute(String name)
- void
setAttribute(Sting name, Object)
- void
removeAttribute(String name)
- HttpSession
- Session原理:依赖于Cookie
- 第一次获取
Session
没有Cookie
,会在内存中创建一个新的Session对象,响应浏览器Cookie存贮JESSIONID = Session对象的id - 第二次请求时,携带Cookie,服务器自动查找JESSIONID对应的Session对象
- 第一次获取
- 细节:
- 默认情况下一个Seesion对象只作用于一次会话
- 通过自己创建Cookie添加JESSIONED并设置存活时间,可作用与多次会话
Cookie c = new Cookie("JESSIONED", session.getId());
- 通过自己创建Cookie添加JESSIONED并设置存活时间,可作用与多次会话
- 服务器关闭后确保Seesion不丢失:Tomecat自动完成钝化和活化
- 钝化:在服务器正常关闭之前,将Seesion对象序列化到硬盘上
- 活化:在服务器启动后,将Session文件转化为内存中的Seesion对象
- Session销毁时间
- 服务器关闭
- session对象调用:
invalidate()
- session默认失效:30分钟 - 可通过tomecat web.xml进行配置
- 默认情况下一个Seesion对象只作用于一次会话
- 特点:
- 用于在服务器端存储一次会话的多次请求数据
- 可以存储任意类型,大小的数据
- Session 与 Cookie的区别:
- Session存储数据在服务器端,Cookie存储在客户端
- Session没有数据大小限制,Cookie有限制
- Session数据安全,Cookie相对不安全
案例:验证码
- 需求:
- 访问带有验证码的登录页面login.jsp
- 用户输入用户名,密码以及验证码
- 如果用户名和密码错误,跳转登录页面,提示:用户名或密码错误
- 如果验证码输入有误,跳转登录页面,提示:验证密错误
- 全部正确,跳转到主页success.jsp,显示:用户名,欢迎您!