Session与使用redis进行会话管理之体验与疑问
14/Mar 2019
实践使用Redis缓存技术进行会话的管理;疑问在于,1. 会话保持使用session还是使用JWT?2. Redis进行session的存储与管理真的这么简单吗?
基础概念
基础概念,其实可以自己google一下,此处做个搬运工
HTTP协议是无状态的
个人的理解,HTTP无状态协议是指对任务处理没有任何记忆,每一次发送的请求都是新的,都是不带有上一次请求的信息。
例如,用户发起登录请求,登录成功后,再进行用户个人页面的查看;此时用户发起的对个人页面的查看这个请求,是不会告诉服务端应用,该用户已经登录了这个状态。一般而言用户是必须登录才能看到自己的个人信息吧?(这是当然吧),难道每一次用户查看信息,或者在网站上进行的任何操作,应用怎么判断“你是你”,“用户已经登录了”呢?都要每个页面每个功能都要先进行一次登录操作输一次密码吗?
session与cookie
是用来解决什么问题?解决HTTP是无状态的,如何存储 “上下文” 状态(如用户已登录状态)的技术。也可以存储一些信息(如用户不敏感信息,购物车信息)
cookie
是什么?cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制,cookie 是 HTTP 标头的一部分,会附带在每个HTTP请求中
谁产生的?服务器生成,然后发送给User-Agent(一般是浏览器)
重点:浏览器存储,可存储一定数据,附带在HTTP请求中
seession
session,会话控制技术
何时产生Session,怎样产生Session?当客户端访问服务器时,服务器根据需求设置Session,将会话信息保存在服务器上,同时将标示Session的Session_id传递给客户端浏览器
问题:
- 两者有什么不同?
cookie存储在客户端,session一般存储在服务端。session_id一般存储在cookie中。
- 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来操作。