Session的主要作用是通过服务端记录用户的状态。
典型的场景就是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为http协议是无状态的。服务端给特定的用户创建特定的Session之后就可以标识这个用户并且跟踪这个用户了。
Cookie 和 Session的区别
Cookie数据保存在客户端(浏览器端),Session数据保存在服务端。相对来说,Session安全性更高。敏感信息最好不要写入Cookie,最好讲Cookie信息加密然后在使用到的时候再去请求服务端接口进行解密。
如何使用Session进行身份验证
可以通过SessionID来实现特定的用户,SessionID一般会选择存放在Redis中。
用户成功登录系统,然后返回给客户端具有SessionID的Cookie,当用户向后端发起请求的时候,就把SessionID带上,这样后端接口就能知道用户的身份状态。
- 用户输入账号密码后,请求服务端的登录接口。
- 服务端在登录接口处理用户登录请求,创建一个Session信息,存储在Redis中。
- 服务端将Session信息对应的SessionID返回给客户端。
- 客户端在Cookie中存储SessionID,之后在请求服务端其他接口的时候,就携带Cookie里面的SessionID信息。
- 服务端在接收客户端的请求之后,可以从Cookie里面获取到SessionID信息,然后将SessionID与内存或者数据库(Redis等)存储的Session信息进行比较,以验证用户的身份。
如果没有Cookie的话,Sesssion还能用吗?
一般都是通过Cookie来保存SessionID,假如使用了Cookie保存SessionID的方案,如果客户端禁用了Cookie,那么Session就无法正常工作。
但是,并不是没有Cooke之后就不能用Session了,我们可以将SessionID放在请求的url里面,比如 http://xxxx.com/xxx?session_id=xxx
。这种方案也是可行的,但是安全性和用户体验感会降低。
可以对SessionID进行一次加密之后再传入后端。