在网站项目中,session担任了一个很重要的角色,他代表了当前用户的标识信息
但是前端是静态页面。怎么能知道是哪一个session呢?或者是后台收到request请求,那么如何知道这个request是哪一个用户(session)提交的呢?
这就有个问题了。
如何找到session?
session有一个id,这是一个唯一的标识,当会话(session created)被创建,就会得到一个唯一id,然后将这个id保存到cookie,也就是name=JSESSIONID 的cookie,前端每次请求,后台就根据request中带来的cookie是否有session的id,没有,就创建一个session,同时返回response中写回到客户端浏览器。
为了验证这个猜测:
做出以下实验:
接口后台:
实验1:不禁用浏览器cookie
连续两次调用同一个接口,这个接口返回当前session 的id
第一次:
第二次:
查看浏览器cookie:果然JSESSIONID和sessionid一致
实验2:将cookie全部禁用,
使用火狐浏览器开发者版,,测试接口调用
第一次:
第二次:
结果:
控制台没有cookie,并且每次调用后台返回的session id不同。
实验3:仿造session
使用postman 将实验1中得到的session id 拷贝到postman工具中,测试接口调用
结果:
结论:
此次表明:如果后台检查request中带到的cookie中的session id 如果是正常的,未过期的,就不会创建新的session
那么,如果session id随便输入一串字符呢,后台是不是应该创建新的session?
测试:jsession 改为:把刚才postman中的session id最后一位改变为7
发现如果篡改成一个没有产生过的sessionid,后台会创建新的session。
总结:
1,客户端访问后台,后台根据request是否带有有效的session id来决定是否产生新的session,
2,如果禁用cookie,那么用户的的登录状态无法得到保证
3,session 可以被仿造,拿到已登录用户的session id就可以免登录(嘿嘿,突然有个大胆的想法,这个能有什么方式去避免呢?)