欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Servlet会话跟踪技术(session)

程序员文章站 2024-03-20 11:07:40
...

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;
		}