Session与Cookie

Session与Cookie

  • Session属性值
  • Cookie属性值
  • session与cookie的本质区别
  • Session与Cookie的处理流程
    • Session处理流程
    • Cookie处理流程
  • 如何合理的使用session和cookie
  • 代码使用方式
    • Java(Servlet)中设置和获取Session
    • Java(Servlet)中设置和获取Cookie
    • JavaScript中设置和获取Cookie

Session属性值

Session属性值是指在Web应用中,存储在服务器端Session对象中的特定数据。Session对象用于在多个页面之间保持和传递状态信息,它允许在Web应用程序的不同页面之间共享数据。

Session属性值可以是任何类型的数据,如字符串、整数、布尔值、对象等。这些值通过给Session对象设置属性来存储,并且可以通过相应的属性名称进行检索和访问。

例如,在Web应用程序中,可以使用Session对象来存储用户的登录状态、用户ID、购物车内容等信息。通过设置Session属性,可以在用户访问不同页面时保持这些信息的一致性,并在需要时进行读取和更新。

需要注意的是,Session属性值的生命周期与用户的会话相关。当用户关闭浏览器或会话过期时,存储在Session对象中的属性值将被清除。此外,由于Session数据存储在服务器端,因此相对于Cookie而言,Session属性值更加安全和可靠。

Cookie属性值

  1. Name:Cookie的名称。一旦创建,名称便不可更改,且一般不区分大小写。
  2. Value:该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码。
  3. Max-Age/Expires:这两个属性都用于设置Cookie的过期时间。Max-Age的单位为秒,表示多少秒之后失效。Expires则采用UTC或GMT格式,表示具体的过期日期和时间。如果不设置这两个属性,或者设为null,Cookie只在当前会话(session)有效,浏览器窗口一旦关闭,该Cookie就会被删除。如果Max-Age设置为0,则立刻失效。如果Max-Age设置为负数,则表示Cookie将在浏览器关闭的时候失效,浏览器不会对该Cookie做任何形式的存储,这种Cookie也被称为临时Cookie。
  4. Domain:可以访问该Cookie的域名。Domain参数必须以点(“.”)开始,如“.baidu.com”表示所有以baidu.com结尾的域名都可以访问该Cookie。
  5. Path:表示该Cookie对哪些路径有效。Path属性需要使用符号“/”结尾。
  6. Secure:该属性用于标记Cookie是否仅被使用安全协议传输。安全协议,如HTTPS。如果Secure属性被设置,那么Cookie只会被发送到使用HTTPS的页面,这样可以防止在传输过程中被窃取。
  7. HttpOnly:如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。

session与cookie的本质区别

  1. 保存位置:这是session与cookie最本质的区别。session保存在服务器端的内存中,而cookie则保存在客户端,通常是在浏览器中。
  2. 安全性:由于session保存在服务器端,因此相对较为安全。而cookie保存在客户端,可能会受到一些安全风险,例如被拦截或本地文件被访问等。
  3. 保存数据的大小:cookie的大小通常受到浏览器限制,一般来说大约是4K左右。而session在服务器端,其大小通常取决于服务器的内存大小,因此可以保存更多的数据。
  4. 生存周期:session的生存周期通常与用户的访问进程相关,当浏览器或进程关闭之后,session通常也就“消失”了。而cookie的生存周期则可以预先设置,可以是短暂的,也可以是长期的,甚至可以永久保存在本地文件中。
  5. 用途:session通常被用于表示一个持续的连接状态,在网站访问中一般指代客户端浏览器的进程从开启到结束的过程。而cookie则更多地被用于标识用户,它可以是长久的,用于用户跟踪和识别唯一用户。

Session与Cookie的处理流程

Session处理流程

  1. 客户端请求:用户通过浏览器向服务器发送HTTP请求。
  2. 创建Session:服务器接收到请求后,会检查是否存在与该客户端对应的Session。如果不存在,服务器会创建一个新的Session对象,并生成一个唯一的Session ID。
  3. 存储Session:服务器将Session对象存储在服务器端的内存或持久化存储中(如数据库),以Session ID作为键。
  4. 发送Session ID:服务器将Session ID通过响应头发送给客户端,通常是通过设置名为“Set-Cookie”的HTTP头部来实现的。
  5. 客户端保存Session ID:客户端(通常是浏览器)接收到响应后,将Session ID保存在本地,通常是存储在Cookies中。
  6. 后续请求:在后续的请求中,客户端会自动将保存的Session ID通过请求头发送给服务器。
  7. 服务器验证Session:服务器接收到请求后,会从请求头中提取Session ID,并使用该ID从存储中检索对应的Session对象。
  8. 处理请求:服务器使用Session对象中的信息来处理客户端的请求,然后生成响应并发送回客户端。

Cookie处理流程

  1. 设置Cookie:服务器可以在响应中通过“Set-Cookie”头部设置Cookie。这通常发生在用户执行了某些操作后,如登录或设置偏好。
  2. 客户端保存Cookie:客户端(浏览器)接收到响应后,会将Cookie保存在本地。
  3. 发送Cookie:在后续的请求中,客户端会自动将保存的Cookie通过请求头发送给服务器。这通常是在每次发送请求时都会发生的。
  4. 服务器读取Cookie:服务器接收到请求后,会从请求头中提取Cookie信息。
  5. 处理请求:服务器使用Cookie中的信息来处理客户端的请求。例如,服务器可以使用Cookie来识别用户或检索用户的个性化设置。
  6. 更新或删除Cookie:服务器可以在响应中更新或删除客户端的Cookie。更新通常是通过发送一个新的“Set-Cookie”头部来完成的,而删除则是通过设置Cookie的过期时间为过去的时间点来实现的。
    在使用session和cookie时,我们需要根据具体的应用场景和需求来合理选择。以下是一些建议,可以帮助我们合理地使用session和cookie:

如何合理的使用session和cookie

对于session:

  1. 存储敏感数据:session在服务器端存储数据,相对较为安全。因此,我们可以将一些敏感的数据(如用户身份验证信息)存储在session中,以防止被恶意用户窃取。

  2. 管理用户状态:session可以用来管理用户的会话状态,例如记录用户是否已登录、用户的权限等。通过在session中保存这些信息,我们可以在用户访问不同页面时保持状态的一致性。

  3. 控制会话过期时间:通过设置session的过期时间,我们可以控制用户会话的持续时间。例如,在用户长时间未进行操作时,我们可以使session过期,要求用户重新登录,以增加系统的安全性。

对于cookie:

  1. 标识用户:cookie可以用来标识和跟踪用户。通过给用户分配一个唯一的cookie值,我们可以在用户访问不同页面时识别出同一个用户,并提供个性化的服务。

  2. 存储非敏感数据:相对于session而言,cookie的安全性较低。因此,我们应该避免在cookie中存储敏感数据。相反,我们可以将一些非敏感的数据(如用户的偏好设置)存储在cookie中,以便在用户下次访问时提供更好的用户体验。

  3. 控制cookie的作用域和过期时间:通过设置cookie的作用域和过期时间,我们可以控制cookie的作用范围和生命周期。例如,我们可以将cookie的作用域限制在特定的子域名下,或者设置cookie的过期时间为会话级别,使其在浏览器关闭时自动删除。

需要注意的是,session和cookie并非互斥的选择,它们可以相互配合使用。例如,在使用session管理用户状态时,我们可以将session ID存储在cookie中,以便在用户访问不同页面时传递session信息。

最后,无论选择使用session还是cookie,我们都应该遵循最佳的安全实践,如对用户输入进行验证和过滤,使用HTTPS协议进行加密传输等,以确保数据的安全性和完整性。

代码使用方式

Java(Servlet)中设置和获取Session

在Java Servlet中,你可以通过HttpSession接口来管理session。

设置Session属性:

// 获取当前session,如果当前没有session,则创建一个新的session
HttpSession session = request.getSession();// 设置session属性
session.setAttribute("key", "value");

获取Session属性:

// 获取当前session
HttpSession session = request.getSession(false); // 如果当前没有session,则返回null// 获取session属性
String value = (String) session.getAttribute("key");

注意,在request.getSession()方法中传递true(或省略参数,默认为true)会强制创建一个新的session,如果当前不存在的话。传递false则不会创建新的session,而是返回现有的session或者null

Java(Servlet)中设置和获取Cookie

在Java Servlet中,你可以通过Cookie类来管理cookie。

设置Cookie:

// 创建一个新的cookie
Cookie cookie = new Cookie("key", "value");// 可选:设置cookie的其他属性,如过期时间、路径等
cookie.setMaxAge(60 * 60 * 24); // 设置cookie的过期时间为1天
cookie.setPath("/"); // 设置cookie的路径// 将cookie添加到响应中
response.addCookie(cookie);

获取Cookie:

// 从请求中获取所有的cookies
Cookie[] cookies = request.getCookies();// 遍历cookies来找到我们感兴趣的cookie
if (cookies != null) {for (Cookie cookie : cookies) {if ("key".equals(cookie.getName())) {String value = cookie.getValue();// 使用cookie的值break;}}
}

JavaScript中设置和获取Cookie

在JavaScript中,你可以通过document.cookie来管理cookie。

设置Cookie:

document.cookie = "key=value; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/";

注意,在设置cookie时,你需要同时设置其他属性,如expires(过期时间)和path(路径),以确保cookie按你的预期工作。

获取Cookie:

function getCookie(name) {let cookieArr = document.cookie.split(";");for (let i = 0; i < cookieArr.length; i++) {let cookiePair = cookieArr[i].split("=");if (name == cookiePair[0].trim()) {return decodeURIComponent(cookiePair[1]);}}return null;
}let value = getCookie("key");

在这个例子中,getCookie函数遍历所有的cookie,查找并返回指定名称的cookie的值。

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

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

相关文章

ISO 14229和UDS:汽车诊断的黄金标准

UDS简介&#xff1a; UDS是Unified Diagnostic Services的缩写&#xff0c;全名统一诊断服务。它是一种用于汽车电子控制单元&#xff08;ECU&#xff09;之间进行诊断和通信的标准协议&#xff0c;属于ISO 14229标准的一部分。 UDS的起源和背景&#xff1a; UDS的起源可以追…

一个处理Range List的面试题解法

大纲 题目解法Rangeaddremove ToolsRangeListaddremove 代码 最近看到一个比较有意思的面试题。题目不算难&#xff0c;但是想把效率优化做好&#xff0c;也没那么容易。 我们先看下题目 题目 // Task: Implement a class named RangeList // A pair of integers define a ra…

【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]

前言 大家好吖&#xff0c;欢迎来到 YY 滴 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Linux》…

JavaEE-自定义SSM-编写核心-解析yml文件

3.3.1 加载yml文件 编写yaml工厂&#xff0c;用于加载yml文件 package com.czxy.yaml;import java.io.InputStream;/*** 用于处理 application.yml文件* 1. 加载application.yml文件* 2. yaml工具类进行解析* Map<String, Map<String, Map<....>> >* …

Linux使用二进制包安装MySQL

目录 一、软件包下载 二、上传软件包到Linux根目录 1、使用xftp将软件包上传到根目录 2、解压缩 三、准备工作 四、初始化软件 五、设置MySQL的配置文件 六、配置启动脚本 一、软件包下载 官网下载&#xff1a;MySQL :: Download MySQL Community Server 二、上传软件…

AWTK 开源串口屏开发(8) - 系统设置

AWTK 开源串口屏开发 - 系统设置 系统设置只是一个普通应用程序&#xff0c;不过它会用 默认模型 中一些内置的属性和命令&#xff0c;所以这里专门来介绍一下。 1. 功能 在这个例子会用到 默认模型 中一些下列内置的属性和命令&#xff1a; 内置属性 属性类型说明rtc_yea…

蓝桥杯之即约分数

求1~N的所有即约分数 公约数求法&#xff1a;可以使用欧几里得除法求得公约数 算法原理&#xff1a; a,b为两个整数&#xff0c;a>b a除以b的商q1和余数r1 如果r1为0&#xff0c;则最大公约数就为b 如果不为0&#xff0c;则继续使用b除以r取商为q2,余r2 如果r2为0&#xff0…

【连接dbeaver的时候提示Network unavailable due to a certificate issue】

问题&#xff1a; 连接dbeaver的时候提示Network unavailable due to a certificate issue。 Network unavailable due to a certificate issue. Try changing the setting Use Windows trust store in Preferences->Connections and restart DBeaver. It might help if yo…

【Unity3D日常开发】Unity3D中设置Text行首不出现标点符号

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中会遇到Text的文本内容行首出现标点符号的情况&#xf…

PyTorch初探:基本函数与案例实践

正文&#xff1a; 在熟悉了PyTorch的安装和环境配置后&#xff0c;接下来让我们深入了解PyTorch的基本函数&#xff0c;并通过一个简单的案例来实践这些知识。 1. 基本函数 PyTorch的核心是张量&#xff08;Tensor&#xff09;&#xff0c;它类似于多维数组&#xff0c;但可以…

Cesium加载地图-高德影像

废话不多说&#xff0c;直接上代码 整体代码 <template><div id"cesiumContainer" style"height: 100vh;"></div><div id"toolbar" style"position: fixed;top:20px;left:220px;"><el-breadcrumb><…

hive面试题

0. 思维导图 1. 简述Hive♥♥ 我理解的&#xff0c;hive就是一款构建数据仓库的工具&#xff0c;它可以就结构化的数据映射为一张表&#xff0c;并且可以通过SQL语句进行查询分析。本质上是将SQL转换为MapReduce或者spark来进行计算&#xff0c;数据是存储在hdfs上&#xff0c;…

【word】论文、报告:①插入图表题注,交叉引用②快速插入图表目录③删改后一键更新

【word】①插入图表题注&#xff0c;②删改后一键更新 写在最前面插入题注交叉引用修改插入题注的文字格式快速插入图表目录 插入题注后有删改&#xff0c;实现编号一键更新 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你…

【leetcode题解C++】150.逆波兰表达式求值 and 239.滑动窗口最大值 and 347.前k个高频元素

150.逆波兰表达式求值 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 、-、* 和 / 。每个操作数&#xff08;运算对象&#xff09;都可以是一个整数…

ubuntu安装mongod

1、安装 1.1包管理公钥导入 wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -执行结果截图如下&#xff1a; 1.2创建列表文件 lsb_release -dc 根据你的Codename 来修改下方对应的命令&#xff0c;如果你的是jammy&#xff0c;就修改为j…

飞机发动机和汽车发动机的构成有什么区别?燃料有什么区别?

问题描述&#xff1a;飞机发动机和汽车发动机的构成有什么区别&#xff1f;燃料有什么区别&#xff1f; 问题解答&#xff1a; 飞机发动机和汽车发动机在构成和燃料方面有一些显著的区别&#xff0c;主要是由于它们应对的工作环境和任务的不同。以下是它们的一些区别&#xf…

Hive常见问题汇总

Hive和Hadoop的关系 Hive 构建在 Hadoop 之上&#xff0c; HQL 中对查询语句的解释、优化、生成查询计划是由 Hive 完成的 所有的数据都是存储在 Hadoop 中 查询计划被转化为 MapReduce 任务&#xff0c;在 Hadoop 中执行&#xff08;有些查询没有 MR 任务&#xff0c;如&…

防御保护---安全策略

文章目录 一.安全策略概述 概述&#xff1a; 安全策略的作用&#xff1a; 包过滤防火墙的安全风险 状态检测防火墙访问过程 安全策略与传统防火墙的区别 二.案例分析 基础配置&#xff1a;&#xff08;正常数通&#xff09; 安全策略配置 练习 一.安全策略概述 概述&#xff1…

OpenAI API 的最新动态:新一代的嵌入模型,更新 GPT-4 Turbo,更新 GPT-3.5 Turbo 以及降低 API 价格

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 OpenAI 正在推出新一代嵌入模型、新的 GPT-4 Turbo 和审查模型、新的 API 使用管理工具&#xff0c;而且很快就会降低 GPT-3.5 Turbo 的价格。 OpenAI…

vuepress搭建个人博客以及部署

vuepress&#xff0c;Vue 驱动的静态网站生成器&#xff0c;以 Markdown 为中心的项目结构&#xff0c;以最少的配置帮助你专注于写作。 vuepress官网 vuepress存在很多主题&#xff0c;也可以自定义设计主题&#xff0c;上传npm使用 这里采用vuepress-theme-hope主题模板进行制…