Java基础(19)Cookie和Session

在Web开发中,Cookie和Session是用来保持客户端和服务器之间状态的两种机制。它们有不同的工作方式及应用场景。

Cookie

Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再次发起请求时被发送回服务器。Cookie常用于识别用户。

特点
  1. 客户端存储:存储在客户端(浏览器)。
  2. 大小限制:每个站点约4KB。
  3. 数量限制:每个域名下的Cookie数量有限。
  4. 包含在每个请求中:每次请求都会携带Cookie,可能会影响性能。
  5. 有过期时间:可以设置过期时间来决定Cookie何时被删除。
示例代码

在Java的Servlet中设置和读取Cookie:

// 在Servlet中设置Cookie
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 创建一个CookieCookie cookie = new Cookie("user", "JohnDoe");cookie.setMaxAge(60*60*24); // 设置过期时间为一天response.addCookie(cookie); // 将Cookie加入响应中// ...
}// 在Servlet中读取Cookie
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Cookie[] cookies = request.getCookies(); // 获取请求中的所有Cookieif (cookies != null) {for (Cookie cookie : cookies) {if ("user".equals(cookie.getName())) {// 如果找到名为"user"的Cookie,处理它String userName = cookie.getValue();// ...}}}// ...
}

Session

Session提供一种在服务器上跨多个请求或访问者会话保持状态的方式。它利用服务器内存来存储用户状态。

特点
  1. 服务器端存储:存储在服务器端,安全性较高。
  2. 大小限制:一般没有限制,依赖于服务器的内存。
  3. 不跟随每个请求:Session ID会被存储在Cookie中,并随请求发送,但Session数据不会。
  4. 有过期机制:通常Session会在一段时间不活动后过期。
  5. 支持任意Java对象:与Cookie只支持String不同,Session可以存储任何类型。
示例代码

在Java的Servlet中使用Session:

// 在Servlet中创建和使用Session
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取当前请求的Session,如果没有则创建一个HttpSession session = request.getSession();// 在Session中存储信息session.setAttribute("user", "JohnDoe");// 设置Session超时时间session.setMaxInactiveInterval(2*60*60); // 2小时// ...
}// 在Servlet中读取Session信息
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session = request.getSession(false); // 如果当前没有Session则不创建新的Sessionif (session != null) {String userName = (String) session.getAttribute("user");if (userName != null) {// 处理userName// ...}}// ...
}

深入细节

  • 安全性

    • Cookie存储在客户端,可能会被用户或者第三方读取,因此敏感信息不应该保存在Cookie中。
    • Session存储在服务器端,相对更安全,但需要防范会话劫持攻击。
  • 生命周期

    • Cookie的生命周期可以由服务器或者客户端控制,可以持久化存储。
    • Session的生命周期通常由服务器控制,用户关闭浏览器或Session超时都会结束。
  • 资源消耗

    • Cookie发送到服务器会增加请求大小。
    • Session虽然不随请求发送,但会占用服务器内存资源。
  • 扩展性和可维护性

    • 如果Web应用需要在多个服务器之间共享状态,使用Session需要额外的机制来进行状态同步,如分布式缓存或数据库。
    • Cookie由于是客户端解决方案,不受服务器架构影响。

结论

Cookie和Session都是HTTP无状态协议中维持状态的有效机制,但它们的适用场景不同。Session适用于存储不适合放在Cookie中的敏感信息或大量信息,而Cookie通常用于识别用户,进行会话跟踪等轻量级的任务。正确地使用这些机制可以提升Web应用的性能和可用性。

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

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

相关文章

计算机网络学习记录Day1

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 计算机网络学习记录Day1 本文基于1.1 计算机网络在信息…

python 中的数据结构

python 中的数据结构 1.1 序列 序列时有索引的数组 举例实现: a["北京","上海","广州","深圳","重庆","成都"] print(a[2]) print(a[-1] " " a[-2]) print(a[1:3]) # 运行结果 "&…

C++使用单链表实现一元多项式的加,乘操作

相邀再次喝酒 待 葡萄成熟透 但是命运入面 每个邂逅 一起走到了 某个路口 是敌与是友 各自也没有自由 位置变了 各有队友 首先,按照惯例,十分欢迎大家边听歌边观看本博客!! 最佳损友 - 陈奕迅 - 单曲 - 网易云音乐 (163.com) 一…

理解这些道理相当于在人生的航程上装备了一双智慧的翅膀

1. 走自己的路,因为只有你才能决定自己的命运。 2. 养育者亦会受反哺,掌灯人终会被照亮。 3. 如果心情不好,建议玩ARPG手机游戏[降龙猎手]放松自己,TapTap上就可以下载,不要 让不好的情绪一直持续下去,尽快…

最新优质电商API接口,附带教程【多语言环境高并发】

给大家更新一波24年一月份的新接口吧。 01 接口信息 线路推荐: 多仓: 1.春盈: https://wds.ecsxs.com/230989.json 2.无意: http://www.wya6.cn/tv/yc.json 3.主流电商平台API数据采集 单仓: 1.饭太硬: http:/…

如何在 Ubuntu 18.04 上为 Nginx 创建自签名 SSL 证书

简介 TLS,即传输层安全性,及其前身 SSL,即安全套接字层,是用于将普通流量包装在受保护的加密包装中的网络协议。 使用这项技术,服务器可以在服务器和客户端之间安全地发送流量,而不会被外部方拦截。证书系…

探无止境,云游未来 | “游戏出海云”发布

4月28日下午,2024中国移动算力网络大会之“游戏出海”分论坛在江苏省苏州金鸡湖国际会议中心圆满落幕。 此次论坛由中国移动海南公司主办,中国移动通信集团政企事业部、中国移动云能力中心、中国移动国际公司共同协办。海南省工业与信息化厅副厅长黄业晶…

爬虫学习(1)简易网页采集器

如何使用: (reques ts模块的编码流程) 指定url 发起请求 获取响应数据 持久化存储 import requests#UA:User-Agent (请求载体的身份标识) #UA伪装:门户网站的服务器会检查对应请求的载体身份标识 if __name__ "__main__":urlhttps://www.baidu.com/s#处理…

ESP8266做主机 手机网络助手为从机

ATCIFSR查看地址,一般ESP8266 为192.168.4.1 在手机上下载网络调试助手,打开TCP客户端 创建后192.168.4.1 端口8089然后连接ESP8266热点。 ESP向手机发数据前先发送要发几个数据ATCIPSEND0,8表示发8个,然后再发8个数 上面创建好热点后&…

GB/T 29061-2012 建筑玻璃用功能膜检测

建筑用玻璃功能膜是指一种由耐磨涂层、经工艺处理的聚酯膜和保护膜通过胶黏剂组合在一起的多层聚酯复合薄膜材料。 GB/T 29061-2012建筑玻璃用功能膜测试项目: 测试项目 测试方法 外观质量 GB/T 29061 尺寸偏差 GB/T 29061 光学性能 GB/T 29061 颜色均匀性…

(Arxiv,2024)Mind the Modality Gap:通过跨模态对齐建立遥感视觉语言模型

文章目录 相关资料摘要引言相关工作对比语言图像预训练遥感域专用 CLIP 模型遥感中的多模态 CLIP 启发模型 方法模型算法输入阶段:输出阶段:步骤说明: 第一阶段:通过权重插值修补CLIP将遥感图像模态与自然图像和文本对齐 实验 相关…

基于PSO优化的PV光伏发电系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于PSO优化的PV光伏发电系统simulink建模与仿真。其中PSO采用matlab编程实现,通过simulink的函数嵌入模块,将matlab调用进simulink中。 2.系统仿真结…

java-Spring-Lombok-讲解-(一文一言)创伤是成熟的途径

高手都在孤独前进-致敬我们不悔的青春 我打算每篇文章下找一下文言警句-说不那天会用上😁😁😁😁 每篇一言 创伤是成熟的途径 希望经历过创伤的人,能更好享受当下, 爱自己胜过爱别人呀 目录 🎻Lombok简介 &#…

如何在 Ubuntu 16.04 上为 Nginx 创建自签名 SSL 证书

简介 TLS,即传输层安全协议,及其前身SSL,即安全套接字层,是用于将普通流量包装在受保护的加密包装中的网络协议。 使用这项技术,服务器可以在服务器和客户端之间安全地发送流量,而不会被外部方拦截。证书…

5.协议的编解码

本章内容其实没有多大难度,主要考察大家的细心程度.计算数据长度然后截取相应字节数组并按照协议进行解码,编码则反之。 1.基础消息的编解码 Override public BasicMessage decode(byte[] bytes) {int dataLength ByteUtil.bytesToInt(ByteUtil.extra…

embedding介绍和常用三家模型对比

Embedding(嵌入)是一种在计算机科学中常用的技术,尤其是在自然语言处理(NLP)领域。在NLP中,embedding通常指的是将文本中的单词、短语或句子转换为固定维度的向量(vector)。这些向量代表了文本中的语义和上下文信息。 1.embedding 介绍 1.1 为什么需要Embedding? 在…

MongoDB聚合运算符:$toInt

MongoDB聚合运算符&#xff1a;$toInt 文章目录 MongoDB聚合运算符&#xff1a;$toInt语法使用举例 $toInt聚合运算符将指定的值转换为整数类型。如果指定的值为空或缺失&#xff0c;则返回null&#xff1b;如果值无法被转换为整数&#xff0c;则报错。 语法 {$toInt: <exp…

sqlalchemy 分表实现方案

1.需求及场景概述 现有系统中因历史数据量过大&#xff0c;产生了将历史数据进行按月存储的要求&#xff0c;系统和数据库交互使用的是sqlalchemy&#xff0c;假设系统的原来的历史记录表&#xff08;record&#xff09;如下&#xff1a; 为了将历史数据按月分表存储&#xff0…

蓝桥杯国赛练习题真题Java(矩阵计数)

题目描述 一个 NM 的方格矩阵&#xff0c;每一个方格中包含一个字符 O 或者字符 X。 要求矩阵中不存在连续一行 3 个 X 或者连续一列 3 个 X。 问这样的矩阵一共有多少种&#xff1f; 输入描述 输入一行包含两个整数 N,M (1≤N,M≤5)。 输出描述 输出一个整数代表答案。…

C语言的34个运算符

算术运算符&#xff1a; 加法运算符&#xff08;&#xff09;&#xff1a;对两个操作数进行相加。减法运算符&#xff08;-&#xff09;&#xff1a;从第一个操作数中减去第二个操作数。乘法运算符&#xff08;*&#xff09;&#xff1a;将两个操作数相乘。除法运算符&#xff…