session、cookie、token

目录

 

session、cookie、token

总览:

cookie如何实现session?

session保存在哪?

cookie保存在哪?除了session id里面还有什么?

除了cookie,还有什么方式实现session?

token是啥?

token的好处?


session、cookie、token

总览:

http是一个无状态协议,客户端向服务器端发送一个http请求,服务器端返回一个http响应报文,在这个过程中服务器端并不会记录什么信息,但是有时候我们是需要记录用户的状态,因此就需要某种机制来识别用户,保存用户的状态,而这种机制就是session。而cookie就是实现session的一种方式。

参考:https://www.cnblogs.com/moyand/p/9047978.html

cookie如何实现session?

当用户第一次访问服务器端的时候,服务器端会为它创建一个session,并且用一个唯一标识session id来进行标识,服务器端发回给客户端的响应报文里就有一个set-cookie字段,里面的值就是session id。而客户端收到后就把这个值保存在cookie里面(cookie保存在本地文件里面),并且之后发送的请求报文都包含 Session ID,这样服务器端就知道你是谁了。

session保存在哪?

session默认保存在服务器端的一个文件中(也可以放在数据库,内存中)

cookie保存在哪?除了session id里面还有什么?

cookie保存在客户端的本地文件中,cookie还可以保存用户名密码来进行免密登录

除了cookie,还有什么方式实现session?

还可以用URL重写的方式。即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。


token是啥?

这个其实我也不是很理解,可能有问题?

token我觉得跟syn cookie的思想有点类似。我服务器端不需要保存session,而让session 由客户端来保存。但是服务器端怎么才能验证这个session是合法的呢?那就对数据做一个签名,就是用一个哈希函数得到数据的映射值,再用一个只有我才知道的密钥对其进行加密,然后把这个签名和数据一起作为token 发给客户端,让它保存在本地,  而客户端之后的请求都会携带上这个token,而服务器端不需要保存token,只需要验证这个token里面的数字签名就ok了。

注意:Token 中的数据是明文保存的, 还是可以被别人看到的, 所以我不能在其中保存像密码这样的敏感信息。

其具体过程:
1.用户通过用户名和密码发送请求。
2.程序验证。
3.程序返回一个签名的token 给客户端。
4.客户端储存token,并且每次用于每次发送请求。
5.服务端验证token并返回数据。


token的好处?

1. 降低服务器内存资源的开销,因为现在不需要在服务器端保存session了

2.  可扩展性,可以更好的实现负载均衡。

现在我可以随时在服务器加新的机子,而不用考虑这个连接的session id保存在哪台机子上。这个连接的这一个请求可以由机器a来处理,而下一次请求可以由机器b来处理,因为服务器只需要用相同的哈希算法和自己的私钥去验证token就完事了。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值