cookie和session、请求转发和重定向

会话

分为有状态会话和无状态会话

在HTML中,"会话"一般指的是Web服务器与客户端(通常是浏览器)之间进行的一系列请求和响应。它是一种在网络上模拟人与人之间通信的方式,常见于Web应用程序中。

会话、Cookie和Session都是Web开发中用于跟踪和管理用户状态的重要概念。下面我将对它们进行简要解释和比较:

  1. 会话(Session):
    • 会话是一种服务器端技术,用于在多个页面请求之间保持用户状态。
    • 服务器为每个用户创建一个唯一的会话,并在服务器端存储与该会话相关的数据,例如用户身份、登录状态等。
    • 会话通常使用一个唯一的会话ID来标识,该ID可以通过Cookie或URL重写等方式在客户端和服务器之间传递。
    • 会话数据存储在服务器端,因此可以存储更多的信息,并且相对安全。
  1. Cookie:
    • Cookie是一种存储在用户浏览器中的小型文本文件,用于跟踪用户状态。大部分浏览器会限制cookie的大小,4KB/8KB,对同一个域名下的cokie也有限制,一般为20个。
    • 当用户首次访问网站时,服务器可以通过在响应头中设置Set-Cookie来发送一个或多个Cookie到用户的浏览器。
    • 浏览器会存储这些Cookie,并在后续的请求中自动将其发送回服务器,以便服务器能够识别用户并恢复其状态。
    • Cookie通常用于存储用户的登录状态、个性化设置等。一般用来设置到期规则,在到期之前会一直存在浏览器上,除非将其清除。
    • Cookie可以被篡改,一般被用于存储少量且不敏感的数据。浏览器可以设置Cookie禁用。
  1. Session与Cookie的比较:
    • 存储位置:会话数据存储在服务器端,而Cookie数据存储在用户的浏览器中。
    • 数据安全性:会话数据相对更安全,因为存储在服务器端,不容易被篡改或窃取。而Cookie数据存储在客户端,存在被恶意用户篡改或窃取的风险。
    • 数据容量:会话可以存储更多的数据,因为数据存储在服务器端,没有大小限制。而Cookie的大小通常受到限制(通常是4KB)。
    • 生命周期:会话通常具有短暂的生命周期,通常在用户关闭浏览器或一段时间无活动后过期。而Cookie可以设置过期时间,可以长期存储在用户的浏览器中。
    • session用来记录用户状态,服务端会对每个浏览器会设置一个session对象,一般一个浏览器会独占一个session对象

总结起来,会话和Cookie都是用于跟踪和管理用户状态的技术,但它们在存储位置、数据安全性、数据容量和生命周期等方面存在差异。根据具体需求和应用场景,开发人员可以选择使用会话、Cookie或它们的组合来实现用户状态的跟踪和管理。

setCookie
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1、服务端创建cookie对象Cookie cookie =  new Cookie("role", "aa");   //键、值,在有效期内,如果键相同,值不同,关闭再次打开,值会覆盖之前的;如果键不同,会重新创建一个cookie//2、设置cookie有效期// >0  cookie有效期//  <0  临时存储,是一个会话,关闭浏览器就消失了// 0 删除,刷新页面就没有了cookie.setMaxAge(0);//3、将cookie响应给客户端response.addCookie(cookie);}
getCookie
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取cookie信息Cookie[] cookies =  request.getCookies();for(int i=0;i<cookies.length;i++) {/*if(cookies[i].getName().equals("account")) {System.out.println(cookies[i].getValue());}*/System.out.println(cookies[i].getName()+"--->"+cookies[i].getValue());    //获取关键字和值}}
JS和JQuery设置获取cookie
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="resource/js/jquery.js"></script>
<script src="resource/js/jquery.cookie.js"></script>
<script type="text/javascript">//设置cookie
//document.cookie="password=123456;max-age="+60*60
//获取cookie 
//document.cookie//根据关键字获取cookie值的方法
//indexOf() 判断有没有这个子串,有返回匹配的第一个串的第一个位置,没有返回-1
//indexOf("admin",n)跳过n个元素查找这个子串
//lastIndexOf()判断有没有这个子串,有返回匹配的最后一个串的第一个位置,没有返回-1//split()用于把一个字符串分割成字符串数组
/* function getCookie(key){var cookies = document.cookie.split(";")console.log(cookies)for(var i=0;i<cookies.length;i++){if(cookies[i].trim().indexOf(key)==0){return cookies[i].trim().substring(key.length+1)}}return ""
}console.log(getCookie("account")) *///jquery设置cookie
$.cookie('name', 'value', { expires: 7 });   //设置7天后过期
console.log($.cookie('name'))  //根据关键字读取cookie的值
console.log($.cookie())   //读取cookie所有的信息
$.removeCookie('name')   //根据关键字删除cookie的信息</script>
</head>
<body>
hello
</body>
</html>

setSession
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取session对象HttpSession session =  request.getSession();//设置值session.setAttribute("key", "value");session.setAttribute("account", "xixi");//重写url追加jsessionidString newUrl =  response.encodeRedirectURL("getSession");//重定向response.sendRedirect(newUrl);/*//获取sessionidSystem.out.println(session.getId());//获取session信息System.out.println(session.getAttribute("key"));System.out.println(session.getAttribute("account"));//删除session.removeAttribute("key");System.out.println(session.getAttribute("key"));System.out.println(session.getAttribute("account"));//销毁sessionsession.invalidate();*/}
getSession
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取session对象HttpSession session =  request.getSession();   //如果有jsessionid会到服务端找到对应的session,如果没有则创建一个新的session对象System.out.println(session.getId());//获取session信息System.out.println(session.getAttribute("key"));System.out.println(session.getAttribute("account"));//删除/*session.removeAttribute("key");System.out.println(session.getAttribute("key"));System.out.println(session.getAttribute("account"));*///销毁sessionsession.invalidate();}

cookie禁用后,请求转发和重定向

当用户禁用了Cookie时,请求转发和重定向的行为可能会受到一些影响。下面我将简要解释这些影响:

  1. 请求转发(Forwarding):是一种服务器行为,当客户端请求到达后,服务器进行转发
    • 在请求转发过程中,请求从客户端发送到服务器,然后由服务器转发到另一个服务器或资源。
    • 当Cookie被禁用时,服务器可能无法识别和跟踪用户的会话。因此,当请求转发到另一个服务器或资源时,新的服务器可能无法识别用户的身份或状态。
    • 这可能导致用户在请求转发后被视为新用户,并需要重新登录或重新输入个人信息。
  1. 重定向(Redirection):服务端指导客户端行为,客户端发出一个请求,被服务端接收处理之后,服务端给客户端一个响应(一个新的地址),当客户端接收到新的地址之后,立马发起第二次请求,服务端接收并响应
    • 重定向是指将用户的请求从服务器A重定向到服务器B,然后返回一个新位置的响应。
    • 当Cookie被禁用时,与请求转发类似,服务器可能无法识别和跟踪用户的会话。因此,当用户被重定向到另一个服务器时,新的服务器可能无法识别用户的身份或状态。
    • 这可能导致用户在重定向后被视为新用户,并需要重新登录或重新输入个人信息。

需要注意的是,即使Cookie被禁用,某些情况下仍然可以使用其他技术来跟踪用户状态,例如通过URL参数、隐藏表单字段或服务器端会话来传递必要的信息。然而,这些方法可能不如使用Cookie方便和高效。

因此,当设计Web应用程序时,开发人员应该考虑到用户可能禁用Cookie的情况,并采取适当的措施来确保应用程序的正常运行和用户体验。

请求转发和重定向

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class S01*/
@WebServlet("/S01")
public class S01 extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public S01() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String account = request.getParameter("account");String password = request.getParameter("password");System.out.println("s01账号:"+account);System.out.println("s01密码:"+password);System.out.println("s01");//请求转发//可以转发至网站内任意资源//一次请求,数据在request域中共享//地址栏不发生改变//不能跨域                  //服务端行为//request.getRequestDispatcher("S02").forward(request, response);//request.getRequestDispatcher("main.html").forward(request, response);//request.getRequestDispatcher("WEB-INF/demo.html").forward(request, response);//重定向,不能访问到WEB-INF里面的,WEB-INF屏蔽了所有客户端行为,WEB-INF是针对服务端的//客户端行为//两次请求,数据在request域中不共享//可以重定向到任意地址(可以跨域)//response.sendRedirect("S02");//response.sendRedirect("main.html");//response.sendRedirect("https://www.baidu.com/");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class S02*/
@WebServlet("/S02")
public class S02 extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public S02() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubString account = request.getParameter("account");String password = request.getParameter("password");System.out.println("s02账号:"+account);System.out.println("s02密码:"+password);System.out.println("s02");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/601495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(Python + Selenium4)Web自动化测试自学Day2之动手尝试

目录 文章声明⭐⭐⭐让我们开始今天的学习吧&#xff01;小试牛刀关于select标签关于弹窗只有一个点击按钮的弹窗需要确认的弹窗用户可以输入的弹窗 文章声明⭐⭐⭐ 该文章为我&#xff08;有编程语言基础&#xff0c;非编程小白&#xff09;的 Python Selenium4 Web自动化测试…

Servlet 3.0的异步处理

1、传统Servlet处理 Web容器会为每个请求分配一个线程&#xff0c;默认情况下&#xff0c;响应完成前&#xff0c;该线程占用的资源都不会被释放。若有些请求需要长时间(例如长处理时间运算、等待某个资源)&#xff0c;就会长时间占用线程所需资源&#xff0c;若这类请求很多&…

印象笔记02: 笔记本管理系统和空间使用

印象笔记02&#xff1a; 笔记本管理系统和空间使用 印象笔记新建笔记是一件非常容易的事情。笔记多了&#xff0c;就是归纳到笔记本里。 印象笔记一共有三层的笔记结构&#xff1a;最高层级是笔记本组&#xff0c;其次是笔记本&#xff0c;最后是一个个的笔记。合理的分类能够…

【计算机毕业设计】SSM在线化妆品网站

项目介绍 本项目为前后台项目&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,分类管理,产品管理,用户管理,订单管理等功能。 用户角色包含以下功能&#xff1a; 提交订单,用户登录,用户首页,查看…

产品ESD测试

ESD(Electrical Static Discharge)产生的原因多种多样&#xff0c;对集成电路放电的方式也有所不同。为了保证集成电路产品的良率&#xff0c;提高可靠性&#xff0c;需要对电路ESD防护能力进行测试。一般测试分为两类&#xff1a;样品研究型测试和产品通过型测试&#xff1a; …

CHS_01.1.1.1+1.1.3+操作系统的概念、功能

CHS_01.1.1.11.1.3操作系统的概念、功能 操作系统的概念和定义那我们看一下我们现在所使用的电脑是怎么样一步一步变成我们现在看到的这个样子的操作系统 它是计算机系统当中最基本的系统软件 操作系统 它要向上层提供方便应用的服务 这是什么意思呢我们先来看第一种联机命令接…

配置文件的创建和部署

配置描述文件&#xff08;Configuration Profiles&#xff09;的格式为xml&#xff0c;其提供了一个非常容易的方式去给电脑、移动设备或用户定义一些设置或限制&#xff0c;你可以使用Jamf Pro去创建这样的配置文件。 &#xff08;配置文件的负载&#xff09; 有关配置文件的配…

【电源专题】电池充放电中常说的0.2C是什么概念

在工作中我们时常会听到老员工说拿这个电池去做一下充放电,以0.2C充,0.2C放。那么这个0.2C到底是啥? 这就要说到电池C-rate概念。在《GB 31241:便携式电子产品用锂离子电池和电池安全要求》中我们可以看到3.7中写了额定容量为C,也就是制造商标明的电池或电池组容量。 那么…

Java经典框架之Zookeeper

Zookeeper Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. Zookeeper的介绍和安装 2. …

程序性能优化全能手册

本文聊一个程序员都会关注的问题&#xff1a;性能。 当大家谈到“性能”时&#xff0c;你首先想到的会是什么&#xff1f; 是每次请求需要多长时间才能返回&#xff1f; 是每秒钟能够处理多少次请求&#xff1f; 还是程序的CPU和内存使用率高不高&#xff1f; 这些问题基本上…

Visual Studio Code安装C#开发工具包并编写ASP.NET Core Web应用

前言 前段时间微软发布了适用于VS Code的C#开发工具包&#xff08;注意目前该包还属于预发布状态但是可以正常使用&#xff09;&#xff0c;因为之前看过网上的一些使用VS Code搭建.NET Core环境的教程看着还挺复杂的就一直没有尝试使用VS Code来编写.NET Core。不过听说C# 开发…

C++结合OpenCV:图像的基本表示方法

1.二值图像 二值图像是指仅仅包含黑色和白色两种颜色的图像。在计算机中&#xff0c;通过一个栅格状排列的数据集&#xff08;矩阵&#xff09;来表示和处理图像。例如&#xff0c;图1是一个字母A的图像&#xff0c;计算机在处理该图像时&#xff0c;会首先将其划分为一个个的小…

6 网关和配置服务器

文章目录 网关模式Spring Cloud网关Spring Cloud网关微服务其他项目的变更运行和测试小结 运行状况Spring Boot Actuator在微服务中包含Actuator 服务发现和负载均衡ConsulSpring Cloud ConsulSpring Cloud负载均衡器网关中的服务发现和负载均衡使用服务发现和负载均衡 环境配置…

数据库开发之事务和索引的详细解析

2. 事务 场景&#xff1a;学工部整个部门解散了&#xff0c;该部门及部门下的员工都需要删除了。 操作&#xff1a; -- 删除学工部 delete from dept where id 1; -- 删除成功 ​ -- 删除学工部的员工 delete from emp where dept_id 1; -- 删除失败&#xff08;操作过程中…

windows下载官方正版notepad++

一、前言 notepad是一款非常好用的编辑器&#xff0c;简洁、快速、高效。可是很多时候我们想去官网下载时&#xff0c;百度出来的都是一堆第三方下载地址&#xff0c;捆绑流氓软件&#xff0c;要么就是付费&#xff0c;作为一款优秀开源软件&#xff0c;我们必须要知道正确的下…

用Redis实现全局唯一ID

全局唯一ID 如果使用数据库自增ID就存在一些问题&#xff1a; id的规律性太明显受表数据量的限制 全局ID生成器&#xff0c;是一种在分布式系统下用来生成全局唯一ID的工具&#xff0c;一般要满足下列特性&#xff1a; 唯一性高可用递增性安全性高性能 为了增加ID的安全性…

Linux环境变量、export命令、env命令、$符号

一、环境变量 我们所使用的一系列命令本质上就是一个个的可执行程序 不管我们当前的工作目录在何处&#xff0c;命令都可以准确执行&#xff0c;这就是环境变量的作用&#xff0c;是借助环境变量中PATH的值来做到的&#xff0c;PATH记录了系统执行任何命令的搜索路径 环境变量…

ansible 配置jspgou商城上线(MySQL版)

准备环境 准备两台纯净的服务器进行&#xff0c;在实验之前我们关闭防火墙和selinux systemctl stop firewalld #关闭防火墙 setenforce 0 #临时关闭selinux hosts解析(两台服务器都要去做) [rootansible-server ~]# vim /etc/hosts 10.31.162.24 ansible-ser…

博客的简介

博客的简介 大家可以把这个当做目录&#xff0c;从中选择自己需要的内容进行阅览&#xff0c;欢迎大家一键三连&#xff01;&#xff01;&#xff01;&#xff01; 话题讨论专栏 点击进入话题讨论专栏 主要文章&#xff1a; 神奇的代码——可随意修改复制页面内容 Python…

系统安全及应用

1、基本安全措施 1.1、系统账号清理 在Linux系统中&#xff0c;除了用户手动创建的各种账号之外&#xff0c;还包括随系统或程序安装过程而生产的其他大量账号。除了超级用户root之外&#xff0c;其他大量账号只是用来维护系统运作、启动或保持服务进程&#xff0c;一般是不允…