Session和Cookie区别介绍+面试题

简介: session机制属于B/S结构的一部分,主要的作用就是为了保存会话状态。(用户登录成功后,将用户一直登录的状态保存到会话中)

Session

会话:

  • 对应的英文单词:session
  • 用户打开浏览器,进行一系列操作,然后关闭浏览器。整个过程叫做一次会话
  • 一个会话包含多次请求

session机制属于B/S结构的一部分,主要的作用就是为了保存会话状态。(用户登录成功后,将用户一直登录的状态保存到会话中)

使用session机制的原因

  • 因为HTTP协议是一种无状态协议
  • 无状态:请求的时候,B和S是连接的,当请求结束后,连接断开。
  • 可以降低服务器的压力。
  • 为了保存会话状态,只能使用session。
  • 不使用request和application的原因
  • request的作用域太小:一次请求过后就销毁,再次请求,request对象不是同一个。
  • application的作用域太大:一个应用一个,浏览器打开~关闭,再打开一个浏览器,还是同一个application对象,不符合一次会话状态。
  • 从浏览器打开到关闭,session对象都是同一个。

session的实现原理

图片描述:

文字描述:

  1. 浏览器第一次访问服务端,服务端会生成一个对象以及对应的sessionId,将sessionId返回给浏览器
  2. 浏览器拿到这个sessionId后,以cookie的形式保存sessionId
  3. 下一次访问服务端的时候,自动将浏览器内存中的sessionId发送给服务端,服务端根据sessionId找到对应的session对象
  4. 关闭浏览器后,内存消失,cookie消失,sessionId消失,会话结束

第一次访问,response中收到一个服务端返回的sessionId,以cookie的形式存储=7A

下一次再访问的时候,会自动的将sessionId发送给服务端

cookie禁用

服务端正常向浏览器发送sessionId,但是浏览器拒收,所以浏览器器每次访问服务端,返回的session对象都是全新的。

如果想在cookie禁用情况下,使用session机制:

使用URL重写机制:http://localhost:8080/testSession;jsessionid=E62524626BE76547D7287F6B7BB73239

这样的成本较大,因为每次访问服务路径,都需要拼接一个sessionId。

总结

  • session是保存在服务端的,由服务端负责创建
  • 创建的方法:
  • request.getSession(); // 获取到一个session对象
  • request.getSession(false); // 会判断当前session是否存在,不存在返回的session对象是null
  • 因为HTTP协议的B/S结构,浏览器关闭,服务端是不知道,所以session并不会销毁,当一段时间内session对象没人操作,这个session对象就会销毁,默认时间是30分钟。
  • 一次会话:session创建~session销毁
  • session两种模式:
  • 手动销毁:服务端调用API:invalidate();
  • 超时销毁:一段时间内没人操作session对象

Cookie

  • 在session的实现原理中,每一个session对象都有一个对应的sessionId。
  • 例如:JSESSIONID=5CB05924651451FD94F42011461CC4FB,这个键值对数据就是一个cookie实例。
  • 只要浏览器不关闭,用户再次发起请求,浏览器会自动将"运行内存"中的cookie发送个服务端
  • 服务端根据"5CB05924651451FD94F42011461CC4FB"这个值去找对应的session对象
  • cookie中的key 和 value都是字符串

保存位置

  • 最终保存在浏览器客户端上
  • 也可以保存在运行内存上【浏览器关闭后cookie就消失】
  • 还可以保存在磁盘文件上【永久保存】

作用

  • cookie和session一样,都是为了保存会话状态

java中操作cookie

创建cookie实例:

1. Cookie product = new Cookie("productId","1gaga3g23t32g");
2. Cookie user = new Cookie("name","admin");

设置cookie的有效时间

  • 有效时间 > 0 该cookie写入到磁盘中。
  • 有效时间 = 0 该cookie写入到磁盘中,覆盖之前设置的cookie,也可以理解为删除cookie
  • 有效时间 < 0 该cookie会被保存到浏览器运行内存上
  • 不设置 该cookie会被保存到浏览器运行内存上
1. // 设置有效时间
2. product.setMaxAge(60 * 60);

设置cookie关联的路径

举例URL:http://localhost:8080/cookie/create

默认关联的路径为:http://localhost:8080/cookie/*,这些路径浏览器都会自动发送cookie到服务端

如果设置了关联路径,就以设置为主

product.setPath("/cookie");

返回cookie给浏览器

response.addCookie(product);

服务端获取cookie

返回值为一个数组,当cookie获取不到时,返回null

1. Cookie[] cookies = req.getCookies();
2. if (cookies != null) {
3. for (Cookie cookie : cookies) {
4. String name = cookie.getName();
5. String value = cookie.getValue();
6. System.out.println(name+"--"+value);
7.     }
8. }

面试题

cookie和session的区别

1.Session的定义:

Session对象是存储在服务器端的,主要用来存储用户会话所需的属性数据和配置数据。SessionlD需要存储在浏览器端,浏览器发送接口请求的时候需要带着这个SessionlD。

2.Cookie的定义:

Cookie是一小段存储在浏览器端的文本数据,大小不超过4KB。

某些网站采用Session机制识别用户的身份,通常也会将SessionlD存储在Cookie中。发送网络请求的时候,Cookie会在请求头里一起发送给服务器端。

为什么需要cookie和session?

Cookie 和 Session 是用来在客户端和服务器之间存储和维护状态信息的两种不同技术。

Cookie 是客户端存储的一小块数据,它会在客户端和服务器之间来回传递。Cookie 会被存储在浏览器的文件系统里,并且在浏览器发送请求的时候会自动携带这些数据。

Session 是在服务器端存储的一小块数据,它可以用来跟踪用户的状态。Session 数据存储在服务器端,并且由服务器端来维护。 客户端访问服务器时,服务器会根据客户端的请求来确定客户端的身份,并且为客户端分配一个session ID 。客户端每次请求时都会携带session ID ,服务器通过这个 session ID 来识别客户端并获取相应的 session 数据。

详述 session 工作原理?

Session 是一种在 Web 应用程序中跟踪用户状态的机制。当用户访问 Web 应用程序时,服务器会为该用户创建一个唯一的会话 ID,并将该 ID 存储在用户的浏览器中的 cookie 中。在用户与应用程序交互时,服务器会使用该会话 ID 来识别用户,并在服务器端存储与该用户相关的信息。这些信息可以包括用户的登录状态、购物车内容、浏览历史等。通过使用 session,Web 应用程序可以实现更高级的功能,如用户身份验证、数据持久化等。

为什么说session 比cookie更安全?

Cookie 是一种在用户计算机上存储数据的机制。Web 应用程序可以使用 Cookie 存储用户信息,例如用户 ID、偏好设置和购物车内容等。但是,Cookie 存储在用户计算机上,而且可以在客户端上被访问和修改,这使得 Cookie 更容易受到攻击和伪造,从而使其成为安全威胁。

相比之下,Session 机制将数据存储在服务器端,并且仅在用户与 Web 应用程序交互时将其发送到客户端。用户无法访问或修改存储在服务器上的 Session 数据,这使得 Session 比 Cookie 更安全。此外,Web 应用程序可以使用 SSL/TLS 加密来保护传输过程中的 Session 数据,从而进一步增强安全性。

总的来说,虽然 Cookie 与 Session 都用于 Web 应用程序中的用户跟踪,但 Session 更安全,因为它将数据存储在服务器端,而不是在用户计算机上存储,从而减少了安全风险。

目录
相关文章
|
2天前
|
Android开发 Kotlin
Android经典面试题之Kotlin的==和===有什么区别?
本文介绍了 Kotlin 中 `==` 和 `===` 操作符的区别:`==` 用于比较值是否相等,而 `===` 用于检查对象身份。对于基本类型,两者行为相似;对于对象引用,`==` 比较值相等性,`===` 检查引用是否指向同一实例。此外,还列举了其他常用比较操作符及其应用场景。
154 93
|
6天前
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session
|
25天前
|
存储 JavaScript 前端开发
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
39 1
|
26天前
|
存储 安全 搜索推荐
【JavaWeb 秘籍】Cookie vs Session:揭秘 Web 会话管理的奥秘与实战指南!
【8月更文挑战第24天】本文以问答形式深入探讨了Web开发中关键的会话管理技术——Cookie与Session。首先解释了两者的基本概念及工作原理,随后对比分析了它们在存储位置、安全性及容量上的差异。接着,通过示例代码详细介绍了如何在JavaWeb环境中实现Cookie与Session的操作,包括创建与读取过程。最后,针对不同应用场景提供了选择使用Cookie或Session的指导建议,并提出了保障二者安全性的措施。阅读本文可帮助开发者更好地理解并应用这两种技术。
31 1
【多线程面试题十】、说一说notify()、notifyAll()的区别
notify()唤醒单个等待对象锁的线程,而notifyAll()唤醒所有等待该对象锁的线程,使它们进入就绪队列竞争锁。
|
19天前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
60 0
|
27天前
|
存储 缓存 JavaScript
cookie和localStorage的区别特点
cookie和localStorage的区别特点
25 0
|
30天前
|
算法 Java
【多线程面试题十八】、说一说Java中乐观锁和悲观锁的区别
这篇文章讨论了Java中的乐观锁和悲观锁的区别,其中悲观锁假设最坏情况并在访问数据时上锁,如通过`synchronized`或`Lock`接口实现;而乐观锁则在更新数据时检查是否被其他线程修改,适用于多读场景,并常通过CAS操作实现,如Java并发包`java.util.concurrent`中的类。
|
30天前
|
Java
【多线程面试题十三】、说一说synchronized与Lock的区别
这篇文章讨论了Java中`synchronized`和`Lock`接口在多线程编程中的区别,包括它们在实现、使用、锁的释放、超时设置、锁状态查询以及锁的属性等方面的不同点。
|
3月前
|
存储 编解码 应用服务中间件
会话跟踪技术(Session 以及Cookie)
会话跟踪技术(Session 以及Cookie)