共计 42 个字符,预计需要花费 1 分钟才能阅读完成。
第 5 节 Session 快速入门
第 6 节 Session 细节
第 7 节 Session 之验证码案例
正文完
发表至: java
2019-09-14
共计 42 个字符,预计需要花费 1 分钟才能阅读完成。
共计 1960 个字符,预计需要花费 5 分钟才能阅读完成。
使用流程:
问题:分布式环境下,前后访问的服务器不同,所以导致 session 不能准确保存
- https://www.cnblogs.com/woodk/p/10129836.html
- 看源码的时候,可以画一下 主要模块的脑图,更有助于理解。- https://www.cnblogs.com/longhao/p/3558871.html
- https://www.jianshu.com/p/8f4cc45d712e
- https://segmentfault.com/a/1190000013039187
- https://juejin.im/post/59d1f59bf265da06700b0934#heading-9
- https://juejin.im/post/5d01f82cf265da1b67210869#heading-11
共计 1334 个字符,预计需要花费 4 分钟才能阅读完成。
Session
Cookie 和 Session
区别与联系
由于 HTTP 协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是 Session。典型的场景比如购物车,当你点击下单按钮时,由于 HTTP 协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的 Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几件物品。这个 Session 是保存在服务端的,有一个唯一标识。在服务端保存 Session 的方法很多,内存、数据库、文件、集群等。
服务端如何识别特定的客户?第一次创建 Session 的时候,服务端会在 HTTP 协议中告诉客户端,需要在 Cookie 里面记录一个 Session ID,以后每次请求把这个会话 ID 发送到服务器,就可以依据此来识别不同客户端了。如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做 URL 重写的技术来进行会话跟踪,即每次 HTTP 交互,URL 后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。
总结:
Session 是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
Cookie 是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现 Session 的一种方式。
来源链接:https://www.zhihu.com/questio…
什么是 session?
服务器通过 Cookie 发送给客户端一个 sessionID
sessionID 对应服务器里的一小块内存,这里保存着用户的信息,例如登录信息,购物车信息等。
每次用户访问服务器的时候,服务器通过浏览器发送来的 cookie 里的 sessionID 去读取对应的内存里的信息,以此来知道用户的隐私信息。
注意
session 的好处是防止用户随意篡改 cookie,获取别人的信息。
如果用户随意篡改了 sessionID,那么只能重新登录。
因为 sessionID 是随机数,或者随机数夹杂着一些字母,所以没有可能暴力破解 sessionID,获取别的用户的信息。
类比:session 相当于发会员卡,会员卡上只有卡号(sessionID)。下次去健身房的时候,只要看卡号上,就能确定你本人的去他信息。而 cookie 相当于把信息都写在会员卡上了。
关于 session 的实现代码演示(nodejs)
总结
Session 与 Cookie 的关系
一般来说,Session 基于 Cookie 来实现。
Cookie
服务器通过 Set-Cookie 头给客户端一串字符串
客户端每次访问相同域名的网页时,必须带上这段字符串
客户端要在一段时间内保存这个 Cookie
Cookie 默认在用户关闭页面后就失效,后台代码可以任意设置 Cookie 的过期时间
大小大概在 4kb 以内
Session
Session(不翻译, 或翻译为会话)
将 SessionID(随机数)通过 Cookie 发给客户端
客户端访问服务器时,服务器读取 SessionID
服务器有一块内存(哈希表)保存了所有 session
通过 SessionID 我们可以得到对应用户的隐私信息,如 id、email
这块内存(哈希表)就是服务器上的所有 session