Session会话管理技术
会话: 两个交互,在开发中是指浏览器和服务器它们两个的交互
会话管理: 管理会话中产生的数据,一般是记录登录状态
补充: 状态管理,就是管理数据
1、 Session概述
Session用于记录用户的状态。Session指的是在一段时间内,单个客户端与Web服务器的一连串相关的交互过程。
在一个Session中,客户可能会多次请求访问同一个资源,也有可能请求访问各种不同的服务器资源。
2、 Session原理
服务器会为每一次会话分配一个Session对象
同一个浏览器发起的多次请求,同属于一次会话(Session)
首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端,后续再发请求,就会带上cookie,后端就会接收到该cookie中的sessionId从而获得session中的数据
-
注意:session是由服务端创建的,存储在服务器
-
注意: cookie是由服务器创建的,存储在浏览器
3、 Session使用
Session作用域:拥有存储数据的空间,作用范围是一次会话内有效
一次会话是使用同一浏览器发送的多次请求。一旦浏览器关闭,则结束会话
可以将数据存入Session中,在一次会话的任意位置进行获取
可传递任何数据(基本数据类型、对象、集合、数组)
3.1 获取Session
session是服务器端自动创建的,通过request对象获取
//获取Session对象 HttpSession session=request.getSession(); System.out.println("Id:"+session.getId());//唯一标记,
3.2 Session保存数据
setAttribute(属性名,Object)保存数据到session中
session.setAttribute("key",value);//以键值对形式存储在session作用域中。
ps: 登录成功后将登录信息存储到session
3.3 Session获取数据
getAttribute(属性名);获取session中数据
session.getAttribute("key");//通过String类型的key访问Object类型的value
ps: 后续其他请求获取session,判断是否有对应的权限或者是否登录
3.4 Session失效
// 调用方法销毁 session.invalidate();//手工销毁 // 浏览器关闭,原有的Session会失效,相对于是没了
ps: 退出登录后,清空session
4、 Session域与Request域应用区别
request是一次请求有效,只有一次请求转发内数据可以获得
session是一次会话内有效,无论请求转发还是重定向都是可以获得数据的
5、 模拟登录认证[重点]
现有2个资源,一个是登录/login,一个是/list,没有登录认证之前,可以不用登录就可以访问/list所对应的资源,但是不合理,因此我们需要实现登录信息的认证!
即在操作/list等其他请求时,我们需要判断这次请求前有没有登录,如果没有登录就响应(请求转发)到登录页面,如果以前登录过,那就该干什么干什么..
如何实现?
需要在登录成功时,将登录信息存入session
需要在操作/list等请求时先判断session有无登录信息
登录成功后存储session
查询全部时获取session
退出时销毁session
设置一个请求按钮,或者超链接
点击退出到登录页,同时销毁session
设置退出按钮,发送/logout请求
设置接收/logout的Servlet类
6 、总结
session的实际应用:
1 登录成功时存储
2 拦截器中取出数据,判断是否登录,如果已经登录有数据,那就放行,如果没有跳转至登录页
3 退出时销毁session