栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

response.encodeURL基础实战详解(理解cookies,保持session机制)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

response.encodeURL基础实战详解(理解cookies,保持session机制)

文章目录
      • 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

1 方法目的 1.1 浏览器不支持cookies时,实现保持session
  • 当浏览器不支持或者禁用了cookies时,可以通过response.encodeURL保持session
2 背景知识 2.1 session的保持
  • 同一个浏览器打开多个窗口时,服务器(说服务端容器更合适,如tomcat)可识别出是同一个用户(同一个游客,不登录的那种)
  • 一般是浏览器通过cookie实现
2.2 浏览通过cookies实现保持session
  • 1 第一次请求,服务器在response中增加属性Set-cookie(可以理解为,分配了一个sessionId给浏览器)
  • 2 浏览器保存sessionId到本地cookies
  • 3 第二次请求(刷新页面),浏览器在请示头中增加cookies属性

  • 4 服务器通过cookies属性知道这是同一个session,因为服务器保存了所有的sessionId(重启就清空了)

2.3 浏览器禁用cookies后,无法通过cookies保持session
  • 因为此时浏览器,无法把服务器返回的sessionId保存下来,
  • 每次请求都无法设cookies, 导致服务器认为每次请求都是一个新的session
3 response.encodeURL实现保持session 3.1 方法设计
  • 本质就是为url提供一个sessionId, 请求带着sessionId上来,服务器就能够识别
3.2 基本操作流程
  • servlet中, 调用response.encodeURL, 传入当前的url, 返回给页面
  • 页面通过返回的url 发出请求(url上拼上了sessionId信息),服务器即可识别是否为同一个session
4 项目实战 4.1 项目搭建准备
  • 下载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



	
		encode Servlet
		EncodeServlet
	
	
	
		encode Servlet
		/encode.do
		


4.2 项目运行
  • 解压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路径调整
  • 启动项目:双击startup.bat

  • 访问项目: http://localhost:8080/testEncode/encode.do

4.3 cookies实现保持session
  • 不断刷新页面,次数递增

4.4 禁用cookies刷新页面
  • 在chrome上禁用cookies

  • 刷新页面,数据清零,因为是新的session,,每次刷新依然是0,因为每次都是新的session

  • request header没有设置cookies, 服务器只能当成新的session

  • 重新打开浏览器cookies,刷新页面,获取到之前的值

  • request增加了Header cookies, 服务器返回了之前的session(tomcat重启会清空session,session可以配置有效期)

4.5 禁用cookie后,通过encodeURL实现保持session
  • 禁用cookies后,再次清零
  • 点击“click me …” 实现保持session
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396642.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号