Session与使用redis进行会话管理之体验与疑问

实践使用Redis缓存技术进行会话的管理;疑问在于,1. 会话保持使用session还是使用JWT?2. Redis进行session的存储与管理真的这么简单吗?

基础概念

基础概念,其实可以自己google一下,此处做个搬运工

HTTP协议是无状态的

个人的理解,HTTP无状态协议是指对任务处理没有任何记忆,每一次发送的请求都是新的,都是不带有上一次请求的信息。

例如,用户发起登录请求,登录成功后,再进行用户个人页面的查看;此时用户发起的对个人页面的查看这个请求,是不会告诉服务端应用,该用户已经登录了这个状态。一般而言用户是必须登录才能看到自己的个人信息吧?(这是当然吧),难道每一次用户查看信息,或者在网站上进行的任何操作,应用怎么判断“你是你”,“用户已经登录了”呢?都要每个页面每个功能都要先进行一次登录操作输一次密码吗?

session与cookie

是用来解决什么问题?解决HTTP是无状态的,如何存储 “上下文” 状态(如用户已登录状态)的技术。也可以存储一些信息(如用户不敏感信息,购物车信息)

是什么?cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制,cookie 是 HTTP 标头的一部分,会附带在每个HTTP请求中

谁产生的?服务器生成,然后发送给User-Agent(一般是浏览器)

重点:浏览器存储,可存储一定数据,附带在HTTP请求中

seession

session,会话控制技术

何时产生Session,怎样产生Session?当客户端访问服务器时,服务器根据需求设置Session,将会话信息保存在服务器上,同时将标示Session的Session_id传递给客户端浏览器

问题:
  1. 两者有什么不同?

cookie存储在客户端,session一般存储在服务端。session_id一般存储在cookie中。

  1. cookie禁用了,session还能使用吗?

能。session_id信息默认存储在cookie中,在http请求中cookie会被附带发送;cookie被禁用,意味着服务端应用无法通过cookie来获取session_id,所以,只要能通过别的方式把session_id传递到服务端应用,也就意味着session能别查找到,也就能使用了。方法有,通过URL参数传递。

JWT

Redis

基础使用

使用session进行会话控制

在php中,session的实验十分简单。在标准输出之前开始session会话,session_start()即可。如若使用框架,框架一般都会提供操作session的函数以供使用,如ThinkPHP。如果只是写个简单php文件,则可以使用超全局变量$_SESSION来操作。

使用JWT

使用Redis管理会话

session与JWT两种会话控制实现思路的总结

能不能把两者结合使用呢?

为什么要使用Redis管理会话?

使用Redis管理session有这么简单吗?到底是哪儿出了问题呢?

总结

参考链接

  1. 无状态协议 — 维基百科
  2. cookie – 维基百科
  3. session – php manual
Tags// , , ,
More Reading