还差挺多,再说,参考:
问:
1、session+cookie认证过程,到底哪些是服务器程序员写的,哪些是浏览器做的?哪些是import工具包做的?哪些是协议的?(协议应该就是浏览器做的?还是工具包?)
2、每次新的cookie会产生相同的jsessionid吗?也就是说,sessionId的生成是根据啥因素?考虑主机Mac、Ip、端口、浏览器本身有什么唯一的东西吗?还是别的啥?反正肯定不能考虑时间,如果考虑时间,那就不可能是同一个sessionId了。
【源自说法:cookie和session都重新创建,但是,jsessionId不变?不知道对不对。。。
https://blog.csdn.net/qq_40845373/article/details/82015691,评论区。
】
3、token中,一个服务器是一个私钥,还是说,对于不同客户端不同私钥?肯定是一个,否则如果又一一对应,那不还得存储大量,跟session一样了。。
发展史
这个发展史写的特别好:https://www.cnblogs.com/moyand/p/9047978.html
服务器端认证:session,cookie
Token认证:JWT
session认证的问题:
(1)
首先服务器session对应的sessionId是放在cookie中保存的,而前端请求到后端时由于每个可以达到不一样的后端,因此后端获取到cookie中的JSESSIONID时可能在内存中找不到对应的session就会判定为session失效而重新创建session,这样就会生成新的sessionId放在cookie中,那样的话在session中保存的信息就会失效。
解决方案就是用redis+cookie代替session
原文链接:https://blog.csdn.net/muxiaohuadu/article/details/105704945
(2)
1、Session vs Cookie
Cookie的key/value是由服务器端开发自己定义并生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。
Cookie可以实现7天免密登录:??
https://www.cnblogs.com/xiaobiaomei/p/8865535.html
jsessionid的工作流程可以简单用下面的图表示:
对于JSP而言也可以直接写入JSESSIONID,这样服务器可以知道该用户是否合法用户以及是否需要重新登录等,服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。
jsessionid ==request.getSession().getId() // Java中是通过调用HttpServletRequest的getSession方法
2、JSESSIONID在HTTP的Cookie字段中如何存储
第一次浏览器向服务器发起会话,服务器创建session和cookie,把jsessionId放到cookie中发给客户端。
以后每次会话都会创建session和cookie
,但是jsessionId不变
。
1)第一次访问服务器时
客户端(浏览器):第一次发起会话
服务器(程序):
代码:创建session,创建cookie,把jsessionId保存到cookie中
实际对应到HTTP 响应头:Set-Cookie设为jsessionId(只有在首次访问服务器的时候才会在响应头中出现该信息)
//响应头信息:
Set-Cookie: JSSESSIOND=ghco9xd09tnaco; Path=/acr
浏览器会根据响应头的set-cookie信息设置浏览器的cookie并保存之。
注意此cookie由于没有设置cookie有效日期,所以在关闭浏览器的情况下会丢失掉这个cookie。
2)当再次请求的时候(非首次请求),浏览器会在请求头里将cookie发送给服务器(每次请求都是这样)
//请求头信息:
Cookie:JSSESSIOND=ghco9xd09tnaco
3)为什么除了首次请求之外每次请求都会发送这个cookie呢(在这里确切地说是发送这个jsessionid)?
虽然每次发起会话都会创建session和cookie,但是,只要是同一个浏览器,就是同一个jsessionid。
事实上当用户访问服务器的时候会为每一个用户开启一个session,浏览器是怎么判断这个session到底是属于哪个用户呢?jsessionid的作用就体现出来了:jsessionid就是用来判断当前用户对应于哪个session。换句话说服务器识别session的方法是通过jsessionid来告诉服务器该客户端的session在内存的什么地方。
参考:
https://blog.csdn.net/tanga842428/article/details/78600940
3、IE的Cookie文件内容
- COOKIE文件格式:
COOKIE文件为操作系统cookies目录下的一堆txt文件。文件名格式为:
<用户名>@<域名>[数字].txt
即,同一个域下可能有多个cookie文件:
elf@sohu[1].txt
elf@sohu[2].txt
elf@sohu[3].txt
文件名中的数字含义不明。实际上,浏览网页时,浏览器会根据cookies目录下index.dat中的索引信息去定位到某一个文件,然后查找相应COOKIE字段值。
COOKIE文件为UNIX格式,只有换行(0x0A)没有回车(0x0D)。
每个COOKIE文件内,各字段之间以*分隔,每个字段均包含8行信息:
_ntes_nnid // Cookie变量名
456f74e9863f8f4b1a1e37774b0c464d,0 // Cookie变量值
163.com/ // 该Cookie变量所属域,形如csdn.net/或blog.csdn.net/lixianlin/
3584 // 可选标志
3205176064 // 该Cookie过期时间(FILETIME格式)的高位整数
37425091 // 该Cookie过期时间(FILETIME格式)的低位整数
2444768976 // 该Cookie创建时间(FILETIME格式)的高位整数
30082544 // 该Cookie创建时间(FILETIME格式)的低位整数
* // Cookie记录分隔符(为一个星号*),各字段之间的分隔符
参考:
https://zhidao.baidu.com/question/50617806.html
2、
作者:西伯尔
出处:http://www.cnblogs.com/sybil-hxl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。