前言
本文主要介绍内容:
- l cookie会话技术介绍
- l Session对象的简单介绍
项目环境
开发IDE:IDEA2022(已经配置好了tomcat10 及maven)
JDK版本:jdk17
一、Cookie会话技术的简单介绍
1.1cookie介绍
cookie是由 servlet 发送到 Web 浏览器的少量信息,由浏览器保存,然后发送回服务器。Cookie 的值可以唯一地标识客户端,因此 Cookie 通常用于会话管理。Cookie 具有名称、单个值和可选属性,如注释、路径和域限定符、最大年龄和版本号。Servlet 通过使用 httpservletresponse.addcookie (javax.servlet.http.cookie)方法向浏览器发送 Cookie,该方法将字段添加到 http 响应头,以便将 Cookie 发送到浏览器,一次一个。浏览器预计每台 Web 服务器支持20个 Cookie,总共300个 Cookie,并可能将 Cookie 大小限制为每个4kb。
1.2cookie使用实例:
我们假如要通过IDEA来查看一些导入的包的类的源码,可以双击shift,在弹出的页面输入类名即可查阅源码。
具体的cookie使用方法如下:
具体实例如下:
实现效果如下:
由此可见cookie添加成功了。
1.3cookie细节
Cookie的路径,它只能拿到当前请求路径的上一级所包含的路径。也就是说,在访问子路径时,会包含其父路径的Cookie,而在访问父路径时,不包含子路径的Cookie.
例如以下的3个地址:
a:http://localhost:8080/Stu/helloSrvlet
b:http://localhost:8080/Stu/helloSrvlet/b
c:http://localhost:8080/Stu/helloSrvlet/b/c
a路径不可以获得b和c路径下的cookie,而b路径可以获得a路径的cookie,c路径可以获得a和b路径的cookie。
二、session会话技术的简单
HttpSession实例如下:
具体代码如下:
结果如下:
2.2浏览器禁用cookie应该怎么办?
禁用了cookie之后,依赖cookie的session便无法起作用,原因是Request是保存在服务器端用户每次请求的信息。SessionId是保存在Cookie中用于识别当前用户的标识,在每次Request请求的时候会从Cookie中取出并传给服务器从而取出当前用户的Session。当禁用Cookie后,Request请求的时候将无法获取到SessionId,从而也无法获取到原来的Session,用户也无法获取到以前存放在Session中的值。会出现如下的效果:
未禁用前,只要客户端没有关闭,则多个页面都会共享一个sessionid,即共享session,SessionServlet01对象存进session的共享数据,SessionServlet02对象可以获取到。
禁用之后,由于此时 HttpSession对象是通过 req.getSession()方法获取到的,默认的布尔值为true,即代表 req.getSession()每次无法通过sessionId获取到session对象时,会重新创建一个session对象,这就代表两次请求的SessionId是不相同的。
解决方法:
方式一代码如下:
可以使用JavaScript弹窗等方式通过提示信息告知用户,本处为了方便,仅将文字输出到浏览器端即可。
结果:
在禁用cookie的浏览器中先访问/sessionServlet01,再访问/sessionServlet03
可见客户端并没有将sessionid传给服务端。
方式二代码如下:
结果:
由此可以看到路径上带了sessionID。