Servlet会话跟踪技术(session)
Servlet会话跟踪技术(session)
(1)HTTP协议是一种无状态的传输协议。
无状态指的是:
协议对于事务处理没有记忆能力【事物处理】【记忆能力】
对同一个url请求没有上下文关系【上下文关系】
每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况【无直接联系】【受直接影响】
服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器【状态】
(2)解决方案:会话跟踪技术
(3)会话跟踪技术
使用Cookie和Session
Cookie是客户端浏览器存储数据的小文件。
//使用cookie对象保存数据
//如果没有添加过期时间,关闭浏览器时自动清除
//如果加了过期时间,到期自动清除
//document.cookie="name=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT";
document.cookie="username=zhang3";
document.cookie="pwd=123";
//使用cookie对象获取数据
document.cookie
//username=zhang3;pwd=123
//如果想要某个cookie数据,需要自己进行字符串分割操作
会话:一个客户端和服务的整个通信过程,称为一次会话。
Session是服务器端的java对象,用于表示会话的对象,简称会话对象。
会话跟踪:
一个客户端第一次访问服务器,tomcat会创建一个与之对应的session对象。
session对象有一个属性sessionID,用于保存一个唯一的会话编号。
第一次响应时,tomcat会将sessionID作为响应的内容存储在cookie中,cookie名字叫JSessionID。
这个客户端的浏览器接收到响应后,会将JSessionID存储于cookie中。
从第二次请求开始,浏览器发送请求都会把JSessionID放入请求内容中,tomcat
接收到这个请求后,会根据JSessionID找到对应的session(sessionID)对象,这说明两次请求来源于同一个客户端。
会话失效
第一种,session.invalidate()
第二种,两次请求间隔超过了30分钟
第三种,清除浏览器cookie
Session使用(登录)
登录成功:我们将登录信息保存在session对象。
session.setAttribute(“username”,”zhangsan”);
需要验证登录才能进行的操作:查看session对象中是否有登录记录。
session.getAttribute(“username”)==null
每一个客户端都有一个session对象,一个session对象包含这个客户端的若干次请求和响应。
一个客户端可以通过任何一个请求获取到所在的session对象。
案例:
登录成功时:
//保存登录信息到session
HttpSession session=req.getSession();
session.setAttribute("admin", a);
未登录进行访问时先进行判断,如果session中无对象,则证明未进行登录,还未向服务器发送请求,要返回到登录页面
HttpSession session=req.getSession();
Object admin=session.getAttribute("admin");
if(admin==null) {
resp.sendRedirect("../adminLogin.html");
return;
}