Cookie 和 Session 的使用简记
来源:互联网 发布:手机壁纸diy软件 编辑:程序博客网 时间:2024/06/07 20:00
http://mertensming.github.io/2016/10/19/cookie-session/
最近在用 Node.js
写一个 Web App,需要实现一个保持用户登陆状态的一个功能,每当用户进入这个 App 或者进行一些操作的时候,都要判断这个用户是否在登陆状态。我的思路是这样的,没进行一些操作(向服务端发起一个请求),都向服务端查询当前用户是否在登陆状态。那么,这样应该怎么实现呢?
下面就来谈谈我是怎么解决这个问题的。
要实现保持登录状态这个需求,第一步要做的就是登录。登录的操作就是,
用户A
在浏览器发送一个带有账号、密码的 POST 请求到服务器,如果服务器验证成功的话,就要告诉用户A
已经登录成功了。
很好,现在已经登录成功了,但是当用户A
再发送一个请求到服务器去获取用户A
的资料的时候,可是 HTTP 是无状态的协议,所以服务器根本不知道这个请求是谁、从哪里发出来的。
那么,怎么样才能让服务器知道它接收到的这个请求是谁发出来的?
cookie
在这里我只写一下 cookie 是怎样工作的,如果想详细了解 cookie 的话可以看看我这篇文章。
cookie 是怎么工作的?
先不介绍 cookie 到底是什么,我们来看看 cookie
是如何工作的:
1. 没有 cookie 信息状态下的请求
2. 第 2 次以后(存有 cookie 信息状态)的请求
1. 首先,我们假设当前域名下还是没有 cookie 的2. 接下来,浏览器发送了一个请求给服务器(这个请求是还没带上 cookie 的)3. 服务器设置 cookie 并发送给浏览器(当然也可以不设置)4. 浏览器将 cookie 保存下来5. 接下来,以后的每一次请求,都会带上这些 cookie,发送给服务器
看到这里就应该能够想到可以怎么解决上面的那个问题了吧。
我们可以将在
用户A
登录请求的那个响应中,设置用户A
已经登录的 cookie。那么当用户A
再次发送其他请求的时候,就会带上这个 cookie,服务器就可以识别到这是已经登录了的用户A
。
但是,这样做就可以了吗?
session
cookie 虽然很方便,但是使用 cookie 有两个的弊端:
- cookie 中的所有数据在客户端就可以被修改。这就意味着数据非常容易被伪造,一些重要的数据就不能存放在 cookie 中
- 而且如果 cookie 中数据字段太多会影响传输效率。
session 是如何工作的?
为了解决这些问题,就产生了 session,那么 session 又是怎样工作的呢?
- 每个 session 都对应一个 session_id,通过 session_id 可以查询到对应的 session
- session_id 通常是存放在客户端的 cookie 中,服务端存好 session 之后将对应的 session_id 设置在 cookie 中发送给客户端
- 当请求到来时,服务端检查 cookie 中保存的 session_id 并通过这个 session_id 与服务器端的 session 关联起来,进行数据的保存和修改
这意思就是说,当你浏览一个网页时,服务端随机产生一个很长的字符串,然后存在你 cookie 中。当你下次访问时,cookie 会带有这个字符串,然后浏览器就知道你是上次访问过的某某某,然后从服务器的存储中取出上次记录在你身上的数据。由于字符串是随机产生的,而且位数足够多,所以也不担心有人能够伪造。
session 储存
session 的储存有四个常用选项:内存、 cookie、缓存、数据库
- 内存:开发环境存内存比较方便,问题是不能够共享状态(只能在本机访问)
- cookie:使用 cookie 来储存 session 的话,session 保存在用户浏览器端,每次用户访问时,都会主动带上他自己的信息。安全性的话,只要遵照最佳实践来,也是有保证的。它的弊端是增大了数据量传输,好处是比较方便
- 缓存:可以共享
- 数据库:可以共享
signedCookie
如果非要使用 cookie 来记录登陆的用户凭证,也不是不可以,只需要做一些对 cookie 做一个哈希处理就好了。
这样一来,用户就没法伪造信息了。一旦它更改了 cookie 中的信息,则服务器会发现 hash 校验的不一致。
毕竟他不懂我们的 secret_string 是什么,而暴力破解哈希值的成本太高。
- Cookie 和 Session 的使用简记
- SESSION和COOKIE的使用
- Session和Cookie的使用
- cookie和session的使用
- 【简记】Java Web 内幕——Cookie与Session简介和使用
- cookie和session的使用和区别
- cookie和session的使用和区别
- 关于cookie 和 session的安全使用
- session机制和cookie的使用
- java 中session和cookie的使用
- Yii cookie和session的使用
- php中cookie和Session的使用
- session和cookie的使用总结
- yii2 cookie和session的使用
- Session和Cookie的简单使用
- web15天cookie和session的使用
- cookie,session专题2-2:cookie存储session存储,cookie和springmvc的结合使用
- Rails Cookie和session使用
- open-GOP
- 挑战练习题2.3动态规划 poj1742 Coins 多重背包
- JavaFX TableCell经验分享
- Problem--546A--Codeforces--Soldier and Bananas
- 关于IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]的解决
- Cookie 和 Session 的使用简记
- 371. Sum of Two Integers
- JavaScript for Kids 学习笔记1. 学习环境
- 【面试题】剑指offer21
- Linux下安装Hadoop集群(三台一主二从)
- Android消息机制(AsyncTask操控进度条(颜色)线程的用法)
- java web项目,post请求发送数据太大的处理方法
- 设计模式-适配器模式
- iOS 防止按钮多次点击造成多次响应的方法