Java Web之Cookie和Session的理解

简介: Cookie和Session.jpg日常现象登录了某个网站,过一会儿再登录,诶,不用输入密码了,直接是登录状态了,好神奇~~~在某网站看了一部手机,接下来浏览其他网站,旁边的广告全是手机和类似信息,好恐怖~~~浏览某网站时,提示我是第66666位访问的客户,真的假的?其实这些都是Cookie和Session在后面作祟,下面就带大家学习学习这两个东东。
img_1d4abd5aaa8ba0f05e2ccde85622eb92.jpe
Cookie和Session.jpg

日常现象

  • 登录了某个网站,过一会儿再登录,诶,不用输入密码了,直接是登录状态了,好神奇~~~
  • 在某网站看了一部手机,接下来浏览其他网站,旁边的广告全是手机和类似信息,好恐怖~~~
  • 浏览某网站时,提示我是第66666位访问的客户,真的假的?

其实这些都是Cookie和Session在后面作祟,下面就带大家学习学习这两个东东。

Cookie和Session的异同

  • Cookie与Session都是用来保存用户状态信息的一种方法或者手段;
  • Cookie是保存在客户端的临时文件夹, Session是保存在服务器的内存中的,服务器使用一种类似于散列表的结构来保存信息,一个Session域对象为一个客户浏览器服务;
  • Cookie安全性较差,Session安全性较高;
  • Cookie的保存时间可以很久(以txt格式保存在客户端硬盘),Session保存的时间很短,一般是30分钟;
  • Cookie为多个客户浏览器共享,Session为一个客户浏览器独享;
  • Session是通过Cookie的机制来实现的。

两个经典问题与URL重写

1、客户端禁用Cookie,问Session还能工作吗?

  • 不能(事实)绝大多数的网站是这样,原因是没有使用URL重写机制来解决Cookie被禁用的问题。(URL重写代码量大而且只能应用在动态的页面静态的不行)
  • 能(事实)微乎其微的网站可以(比如:卓越),原因是它使用了URL重写机制。

2、 Cookie可以用来实现购物车功能吗?
能,Session能做的Cookie也能做。

** 本质 **
无论Cookie,还是URL重写,目的都是向服务器传递JSESSIONID=32位字符串的key和value名值对。

理解Cookie-Session机制

当程序需要为某个客户端的请求创建一个Session的时候,服务器首先检查这个客户端的请求里是否已包含了一个Session标识——称为 Session id,如果已包含一个Session id则说明以前已经为此客户端创建过Session,服务器就按照Session id把这个 Session检索出来使用。如果客户端请求不包含Session id,则为此客户端创建一个Session并且生成一个与此Session相关联的Session id,这个 Session id将在本次响应中返回给客户端保存。客户端保存这个Session id的方式可以采用Cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发回给服务器。一般这个Cookie的名字都是类似于JSESSIONID。对Session来说,除非应用程序通知服务器删除一个Session,否则服务器会一直保留它。浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器不会知道浏览器已经关闭。之所以会有这种错觉,是大部分Session机制都使用会话Cookie来保存Session id,而关闭浏览器后这个 Session id就消失了,再次连接服务器时也就无法找到原来的Session。如果服务器设置的Cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的Session id发送给服务器,则再次打开浏览器仍然能够找到原来的Session。也就实说关闭浏览器不会导致服务器端Session被删除,但是大量的Session一直在也服务器内存,服务器也受不了,所以服务器为Session设置了一个失效时间,当距离客户端上一次使用Session的时间超过这个失效时间(一般为30分钟)时,服务器就可以认为客户端已经停止了活动,才会把Session删除以节省服务器端的存储空间。

目录
相关文章
|
1月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
72 7
|
2月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
97 9
|
3月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
121 7
Spring Boot 入门:简化 Java Web 开发的强大工具
|
4月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
99 7
|
4月前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
105 0
|
7月前
|
Java Docker 微服务
微服务架构已成为Java Web开发的新趋势,它通过将应用分解为独立、可部署的服务单元,提升了系统的灵活性与可维护性。
微服务架构已成为Java Web开发的新趋势,它通过将应用分解为独立、可部署的服务单元,提升了系统的灵活性与可维护性。每个服务负责特定功能,通过轻量通信机制协作。利用Spring Boot与Spring Cloud等框架可简化开发流程,支持模块化设计、独立部署、技术多样性和容错性,适应快速迭代的需求。
105 1
|
7月前
|
Java Spring 开发者
Java Web开发新潮流:Vaadin与Spring Boot强强联手,打造高效便捷的应用体验!
【8月更文挑战第31天】《Vaadin与Spring Boot集成:最佳实践指南》介绍了如何结合Vaadin和Spring Boot的优势进行高效Java Web开发。文章首先概述了集成的基本步骤,包括引入依赖和配置自动功能,然后通过示例展示了如何创建和使用Vaadin组件。相较于传统框架,这种集成方式简化了配置、提升了开发效率并便于部署。尽管可能存在性能和学习曲线方面的挑战,但合理的框架组合能显著提升应用开发的质量和速度。
170 0
|
9月前
|
安全 Java 数据库连接
Java Web应用
Java Web应用
38 0
|
10月前
|
前端开发 Java 数据库
Java Web开发全攻略:构建高性能Web应用
【4月更文挑战第2天】Java Web开发围绕Servlet和JSP展开,结合Spring/Spring Boot、Struts2、Hibernate等框架构建高性能应用。数据库选择和优化、前端技术如Angular/React/Vue.js以及CI/CD实践是关键。从电子商务到企业系统,Java Web技术为企业与用户互动提供强大平台。持续学习和适应新技术,以应对Web开发挑战。
302 1
Java Web开发全攻略:构建高性能Web应用
|
10月前
|
前端开发 JavaScript Java
Java语言在Web前端开发中的技术应用
Java语言在Web前端开发中的技术应用
162 0