会话管理(Cookies&Session)

发布于:2022-12-08 ⋅ 阅读:(977) ⋅ 点赞:(0)

1.会话管理概念

        HTTP是一种无状态协议,每次客户端访问web页面时,客户端打开一个单独的浏览器窗口连接到web服务器,由于服务器不会自动保存之前客户端请求的相关信息,所有无法识别一个HTTP请求是否为第一次访问。这就引进了web客户端和服务器端之间的会话,这就是会话管理。

2.Cookies

Cookies是存储在客户端计算机上的文本文件,其中保留了各种跟踪信息。

 

在Servlet中操作Cookie:

1.通过Servlet设置Cookie

//创建一个Cookies对象
Cookie cookie = new Cookes("key","value");
//设置最大生存周期
cookie.setMaxAge(60*60*24);
//发送Cookie到HTTP响应头
response.addCookie(cookie);

2.通过Servlet读取Cookie

①通过HTTPServletRequest的getCookies()方法创建一个javax.servlet.http.Cookie对象的数组

②循环遍历数组

③使用getName()和getValue()方法来访问每一个cookie和关联的值

3.通过servlet删除Cookie

//把cookie最大生命周期设置为0
cookie.setMaxAge(0);
//添加到响应头
response.addCookies(cookie);

3.Cookie的局限性

①cookie可能被浏览器禁用

②cookie保存在客户端,可能被删除

③大小受限制

④安全性不高存储形式是存文本类型,信息不安全

4.Session

4.1Session简介 

  1. Session是指使用HttpSession对象实现会话跟踪的技术,是一种在服务器端保持会话跟踪的解决方案。
  2. Session的工作原理:服务器在创建会话对象时,会为其分配一个唯一的会话标识——SessionId,以“JSESSIONID”的属性名保存在客户端Cookie中,在用户随后的请求中,服务器通过读取Cookie中的JSESSIONID属性值来识别不同的用户,从而实现对每个用户的会话跟踪。

2.Cookie和Session主要的区别:

①Cookie是把用户的数据写给用户的浏览器

②Session技术把用户的数据写到服务器中用户独占的session中

4.2获取HttpSession对象

HttpServletRequest接口提供了获取HttpSession对象的方法:

方法

描述

getSession() 

获取与客户端请求关联的当前的有效的Session,若没有Session关联则新建一个

getSession(boolean create)

获取与客户端请求关联的当前的有效的Session,若没有Session关联,当参数为真时,Session被新建,为假时,返回空值

4.3HttpSession接口的方法

HttpSession接口提供了存取会话域属性和管理会话生命周期的方法:

方法

描述

void setAttribute(String key,Object value) 

以key/value的形式将对象保存在HttpSession对象中

Object getAttribute(String key) 

通过key获取对象值

void removeAttribute(String key)

从HttpSession对象中删除指定名称key所对应的对象

void invalidate()

设置HttpSession对象失效

void setMaxInactiveInterval(int interval)

设定HttpSession对象的非活动时间(以秒为单位),若超过这个时间,HttpSession对象将会失效

int getMaxInactiveInterval()

获取HttpSession对象的有效非活动时间(以秒为单位)

String getId()

获取HttpSession对象标识sessionid

long getCreationTime()

获取HttpSession对象产生的时间,单位是毫秒

long getLastAccessedTime()

获取用户最后通过这个HttpSession对象送出请求的时间

4.Session存取数据

//存储会话域属性 
session.setAttribute("username"," huaqing ");
//会话域中获取属性值
String uname = (String)session.getAttribute("username");
//会话域中删除属性
session.removeAttribute("username");

5.Session生命周期

①Session失效时间 
        session具有一定声生命周期,如果session超过会话的最大不活动时间,会话自动失效,会话的最大不活动时间指会话超过此时间段不进行任何操作; 
②设置Session的失效时间 
 

//方法1:在工程的web.xml中配置session的生命周期,单位为分钟; 
<session-config> <session-timeout>15</session-timeout> </session-config>
//方法2:在程序硬编码设置 
session.setMaxInactiveInterval(30 * 60);//设置单位为秒,设置为-1永不过期; 
//方法3:在Tomcat安装目录下conf/web.xml中配置(Web容器级别) 
<session-config> <session-timeout>15</session-timeout> </session-config>


③手动销毁Session
        可以通过调用invalidate()方法立即清除会话对象及其所有会话域属性,同时响应客户端浏览器清除Cookie中的JSESSIONID,在实际应用中,此方法多用来实现系统的“安全退出”功能。

6.Session和Cookie的区别

①cookie数据保存在客户端(分担了服务器端的压力),大小有限制,还可能被用户禁用。锦上添花的功能保存在cookie中。

②session数据保存在服务器端(服务器的压力大,不是非常重要的信息不保存)。数据永远可用,(不会因为cookie被禁用而影响)

 

本文含有隐藏内容,请 开通VIP 后查看

微信公众号

今日签到

点亮在社区的每一天
去签到