课堂笔记4-07会话技术Cookie和Session

本文详细介绍了Web开发中的会话技术,重点讲解了Cookie和Session的工作原理及应用场景。Cookie是服务器生成并存储在客户端的数据载体,用于会话状态跟踪;Session则将状态保存在服务器端,以HttpSession接口形式存在。文章还讨论了何时使用getSession(true)和getSession(false),以及Session的时效性设置。
摘要由CSDN通过智能技术生成

1. 简述什么是会话技术?

答:会话是由一组请求与响应组成,是围绕着一件相关事情所进行的请求与响应。所以这些请求与响应之间一定是需要有数据传递的,即是需要进行会话状态的跟踪。然而,HTTP协议是一种无状态协议,在不同的请求间是无法进行数据传递的,此时就需要一种可以进行请求间数据传递的会话跟踪技术。----这就是会话技术(所谓的会话过程就是指从打开浏览器到关闭浏览器的过程。

2. 什么是Cookie技术?

Cookie是由服务器生成,保存在客户端的一种信息的载体。这个载体中存放着用户访问该站点的会话状态信息。只要Cookie没有被清空,或者Cookie没有失效,那么,保存在其中的会话状态就有效。

浏览器(客户端)中的Cookie:

cookie的工作原理:

1.用户提交第一次请求后,由服务器生成Cookie,并将其封装到响应头中,以响应头的形式发给客户端。

2.客户端接收到这个响应后,将Cookie保存到本地客户端(保存到硬盘中,而不是缓存)。

3.当客户端再次发送同类请求的时候,在请求中会携带保存在客户端的Cookie数据,发送到客户端,由服务器对会话进行跟踪。

4.Cookie技术不是JavaWeb开发专有技术,而是数据Web开发的技术,是所有Web开发语言均支持的技术。

5.Cookie由若干键值对构成,这里的键一般称为name,值为value。Cookie中的键值对均为字符串

同类请求:指的是资源路径相同资源名称不同。(如:localhost:8080/loginlocalhost:8080/captche

总结:cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“谁”了。

cookie的具体使用:

https://blog.csdn.net/qq_29132907/article/details/80390792

域属性空间范围对比

https://blog.csdn.net/qq_42764468/article/details/101942826

 3. 什么是Session技术?

和Cookie一样是Web开发中的一种会话状态跟踪技术,不同的是Cookie是将会话状态保存在了客户端,而Session则是将会话状态保存在了服务端。在JavaWeb开发中,Session是以javax.servlet.http.HttpSession的接口对象的形式出现的。

servlet 容器使用此接口创建 HTTP 客户端和 HTTP 服务器之间的会话。会话将保留指定的时间段,跨多个连接或来自用户的页面请求。一个会话通常对应于一个用户,该用户可能多次访问一个站点。

(1) Session对象的创建

HttpSession session = req.getSession(); //Session对象的创建
session.setAttribute("code",code); //向Session放入指定的名称“code”、指定值code

若要对Session进行操作,则可以通过HttpServletRequest的getSession()方法获取。该方法具有两个重载的属性:

  • public HttpSession getSession(boolean create)

    该方法用于创建Session。若参数create为true,则表示当前没有Session,则新建一个Session,若当前存在Session,则用当前的Session。若参数creat为false表示若当前没有Session,则直接返回null;

  •  public HttpSession getSess

该方法创建Session。相当于getSession(true),即没有Session则创建新的Session。

  • 何时使用getSession(ture),即getSession(),何时使用getSession(false)呢?

getSession(ture),即getSession():向Session中存放数据。解释:当前没有Session,则新建一个Session,若当前存在Session,则用当前的Session,因为存放数据必须要有Session的。

getSession(false):从session中获取数据。解释:若当前存在Session,则从中获取数据;若当前没有Session,那就不可能存在Session数据了。无需创建一个新的Session,在从新的Session中获取数据,因为新创建的Session中是不可能有数据的。

(2) 对Session域属性空间的操作

 Session是一个专门存放数据的集合。我们一般称这个用于存放数据的内存空间为域属性空间,简称域。HttpSession中具有三个方法,是专门用于对该域属性空间中的数据进行读、写操作的。

  • 该方法用于向Session的域属性空间中放入指定的名称、指定值的域属性。
public void setAttribute(String name, Object value);
  • 该方法用于从Session的域属性空间中读取指定名称为域属性值。
public Object getAttribute(String name);
String saveCode = (String)req.getSession().getAttribute("code");//强制类型转换,读取指定名称为域属性值
  • 该方法用于从Session的域属性空间中删除指定名称的域属性。
public void removeAttribute(String name);

(2) Session的工作原理

  • 写入Session列表

服务器对当前应用中的Session是以Map的形式进行管理的,这个Map称为Session列表。该Map的key为一个32位长度的随机串,这个随机串称为JSessionID,Value则为Session对象的引用

当用户第一次提交请求时,服务端Servlet中执行request.getSession()方法后,会自动生成一个Map.Entry对象,key为一个根据某种算法新新生成的JSessionID,value则为新创建的HTTPSession对象。

Session列表
  • 服务器生成并发送Cookie

在将Session信息写入Session列表后,系统还会将“JSessionID”作为name,这个32位长度的随机字符串作为value,以Cookie的形式放到响应报头中,并随着响应,将Cookie发送到客户端。

  • 客户端接收并发送Cookie

客户端接收到这个Cookie后会将其存放到浏览器的缓存中。即,只要客户浏览器不关闭,浏览器中的Cookie就不会消失。

当用户提交第二次请求的时候,会将缓存中的这个Cookie,伴随着请求的头部信息,一块发送到服务端

  • 从Session列表中查找

服务端从请求中读取到客户端发送来的Cookie,并根据Cookie的JSessionID的值,从Map中查找相应Key所对应的value,即Session对象。然后,对该对象的域属性进行读写操作

 

(3) Session的时效

若某个Session在指定时间范围内一直未被访问,那么Session将超时,即失效。

在web.xml中可以通过<session-config/>标签设置Session的超时时间,单位为分钟。默认超时时间是30分钟

<!--filter.listener,servlet,and servlet-mapping等元素要在session-config之前-->  
    <session-config>  
         <session-timeout>15 </session-timeout>  
    </session-config> 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值