cookie 和 session 的区别
1. 前言
cookie 和 session 的区别是什么?这个问题在面试中问到的频率非常高
cookie 和 session 的共同点: 都是用来记录用户访问浏览器时保存的数据,比如:用户的身份信息等
2. cookie 和 session 的工作原理
cookie 工作原理:
浏览器端第一次发送请求到服务端,服务器端创建 cookie,该 cookie 中包含用户的信息,然后将该 cookie 发送到浏览器端。浏览器端再次访问服务器端时会携带上服务器端创建的这个 cookie,服务器端通过 cookie 中携带的数据区分不同的用户
session 工作原理:
浏览器端第一次请求到服务端时,服务器端会创建一个 session,同时创建一个特殊的 cookie,这个 cookie 的值就是 session_id,服务器端将这个 cookie 发送到浏览器端。当浏览器端再次请求服务器端时,浏览器端会携带上这个 cookie,服务器端会很根据这个 cookie 值,也就是 session_id,去查询 session 数据,从而区分不同用户
3. cookie 和 session 的区别总结
cookie 数据存放在浏览器端,session 数据存放在服务器端,但是 session_id 存放在浏览器端
1. 安全性
因为 cookie 数据存放在浏览器端,所以 cookie 没有 session 安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全性建议使用 session
2. session 会占用服务器性能
session 会在一定时间内保存在服务器上,当访问增多时会比较占用服务器的性能,考虑到减轻服务器性能耗损,应当使用一些 cookie
3. cookie 保存的数据受限
单个 cookie 保存的数据不超过 4k,而 session 则存储在服务器端,可以保存更多复杂的数据类型
4. 当禁用 cookie 后,session 还能使用吗?
当我们了解过 session 的工作原理后,可以得知,使用 session 的过程中,session_id 是存放在浏览器端的 cookie 中的,所以,当我们禁用 cookie 后,session 是不能正常使用的
那么问题来了,禁用了 cookie,还想要正常使用 session,应该怎么做呢?
禁用 cookie 后,session 不能正常使用的原因是 cookie 中的 session_id 无法发送到服务器端;所以,只要将 session_id 想办法传递给服务器端即可。方法有很多,比如最常见的: URL 传参
更新于:8天前相关文章
- JS 数组方法 every 和 some 的区别
- 简单描述 MySQL 中,索引,主键,唯一索引,联合索引 的区别,对数据库的性能有什么影响(从读写两方面)
- GET 和 POST 请求方式的区别
- MySQL 中 varchar 和 char 区别
- MyISAM 和 InnoDB 的区别
- composer install、update、require 区别
- .NET中Task和ValueTask的区别
- PHP 函数传值和传引用的区别
- .NET Core最新使用Session的方法
- C#设置Cookie的路径和过期时间
- require 和 include 的区别
- C#中异步编程时使用Task.Factory.StartNew和Task.Run的区别
- Navicat Premium 和 Navicat for MySQL 的区别
- .NET8 Blazor三种模式的区别和使用场景
- Microsoft.AspNetCore.Session已弃用 .NET6如何使用Session
- C++释放new分配内存时带方括号delete[]和不带方括号delete的区别
- js设置cookie默认路径
- js写入和读取cookie
- Shadowsocks各个加密算法的区别
- 程序员和码农的区别:解析软件开发领域的两种角色