token太长cookie放不下怎么办?
将长Token作为Value,另外生成一个短Token作为key,存入Redis中,返回给浏览器短Token,浏览器携带短Token访问服务器,服务器使用短Token去Redis中取出长Token,解析成实体类。
后端可以让token直接存到浏览器的cookie里吗?
首先要明白cookie是什么?
理解Cookie机制
1)cookie机制的基本原理就如上面的例子一样简单,但是还有几个问题需要解决:“会员卡”如何分发;“会员卡”的内容;以及客户如何使用“会员卡”。2)正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。3) 而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于 等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。意思是麦当劳的会员卡只能在麦当劳的店里出示,如果某家 分店还发行了自己的会员卡,那么进这家店的时候除了要出示麦当劳的会员卡,还要出示这家店的会员卡。
理解了cookie的机制,我们可以在后台代码中引入httpclient类库,对cookie对象进行操作。
如果客户端支持Cookie,Web Server在返回Response的时候,在Response的Header部分,加入一个“set-cookie: cookie_name=XXXX”header属性,把cookie放在response中里传到客户端。
客户端会把Cookie存放在本地文件里,下一次访问Web Server的时候,再把Cookie的信息放到HTTP Request的“Cookie”header属性里面,这样jsessionid就随着HTTP Request返回给Web Server。
两码事。
Cookie是stateful的,server需要生成session来处理client的request,这个session的ID记录在cookie中,session需要通过server端database来管理,所以这个state是server和client双方都需要记录的。request结束,client logout,session就结束了。
Token是stateless的,client通过server验证后,server会发给client一个token,这个token可以设置过期时间,甚至访问的路径的权限。client所有的后续request,只要携带这个token就可以对server进行request。这个token,是存储在浏览器的local storage中。当然,也可以存储在cookie当中,使用session来管理,那么使用token的意义在哪里?
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。