- 1 方法目的
- 1.1 浏览器不支持cookies时,实现保持session
- 2 背景知识
- 2.1 session的保持
- 2.2 浏览通过cookies实现保持session
- 2.3 浏览器禁用cookies后,无法通过cookies保持session
- 3 response.encodeURL实现保持session
- 3.1 方法设计
- 3.2 基本操作流程
- 4 项目实战
- 4.1 项目搭建准备
- 4.2 项目运行
- 4.3 cookies实现保持session
- 4.4 禁用cookies刷新页面
- 4.5 禁用cookie后,通过encodeURL实现保持session
- 当浏览器不支持或者禁用了cookies时,可以通过response.encodeURL保持session
- 同一个浏览器打开多个窗口时,服务器(说服务端容器更合适,如tomcat)可识别出是同一个用户(同一个游客,不登录的那种)
- 一般是浏览器通过cookie实现
- 1 第一次请求,服务器在response中增加属性Set-cookie(可以理解为,分配了一个sessionId给浏览器)
-
- 2 浏览器保存sessionId到本地cookies
- 3 第二次请求(刷新页面),浏览器在请示头中增加cookies属性
-
4 服务器通过cookies属性知道这是同一个session,因为服务器保存了所有的sessionId(重启就清空了)
- 因为此时浏览器,无法把服务器返回的sessionId保存下来,
- 每次请求都无法设cookies, 导致服务器认为每次请求都是一个新的session
- 本质就是为url提供一个sessionId, 请求带着sessionId上来,服务器就能够识别
-
- servlet中, 调用response.encodeURL, 传入当前的url, 返回给页面
- 页面通过返回的url 发出请求(url上拼上了sessionId信息),服务器即可识别是否为同一个session
-
- 下载tomcat 10 (如果是其它版本,类路径可能有调整)
- 一个servlet, EncodeServlet.java
package com.example.web;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.*;
public class EncodeServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
HttpSession session = request.getSession();
Integer accessNum = (Integer)session.getAttribute("accessNum");
if(accessNum == null){
accessNum = 0;
}else{
accessNum++;
}
session.setAttribute("accessNum",accessNum);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("test session atrribute
");
out.println(""+accessNum+"
");
String encodeURL = response.encodeURL("encode.do");
out.println("click me to add accessNum in session
");
out.flush();
}
}
- 一个web.xml
4.2 项目运行encode Servlet EncodeServlet encode Servlet /encode.do
-
解压tomcat10 后,到目录webapps下,创建项目文件夹testEncode
-
-
进入项目目录,创建目录WEB-INF
-
-
将web.xml copy到WEB-INF下
-
-
创建目录 classes
-
-
进入classes, copy文件EncodeServlet.java
-
-
编译java文件
-
- 通过cmd进入command窗口
- 输入编译语句,获取class:
javac -classpath C:softwareapache-tomcat-10.0.12libservlet-api.jar EncodeServlet.java
注:根据自己的tomcat路径调整
- 通过cmd进入command窗口
-
启动项目:双击startup.bat
-
-
访问项目: http://localhost:8080/testEncode/encode.do
-
- 不断刷新页面,次数递增
-
-
在chrome上禁用cookies
-
-
刷新页面,数据清零,因为是新的session,,每次刷新依然是0,因为每次都是新的session
-
request header没有设置cookies, 服务器只能当成新的session
-
-
重新打开浏览器cookies,刷新页面,获取到之前的值
-
request增加了Header cookies, 服务器返回了之前的session(tomcat重启会清空session,session可以配置有效期)
-
- 禁用cookies后,再次清零
-
- 点击“click me …” 实现保持session
-



