探讨session与cookie的原理和应用


前言

利用session,javaweb项目实现了登录状态的控制。session和cookie的结合使用,实现对用户登录状态的监控。本文主要整合了网上关于session和cookie的原理和应用,希望对大家有所帮助。


一、剖析原理

当浏览器访问系统时,request会解析请求中携带的jssesionid,用它去找到存在于应用中的session,但是如果没有找到,那么就会调用session的创建方法,并且生成一个新的jssessionid,返回session。(如下截图均引用自网络博文https://my.oschina.net/mingyuelab/blog/2986928 作者:千里明月)
首次请求得到的响应头
当客户端第一次访问服务器系统之后,系统就会生成一个session,并且,会在响应中设置响应头Set-Cookie,其值为JESSIONID=xxx。这样浏览器对localhost:8080和cookie的联系就有了记忆,浏览器会将其存储起来,可在调试工具中看到。
浏览器存储cookie
那么再次访问http://localhost:8080/txx, 浏览器会主动在请求头添加包括jsession的cookie信息。
请求头中携带sessionid
请注意,在响应头中带上set-cookie和在添加包括jsession的cookie信息这2个操作都是由浏览器自动完成的。

那么我们在后端开发的时候需要做什么来识别是否是同一个用户呢?

实际上,用java开发,服务器端在收到浏览器发起登录请求,java后自动创建一个内存,同时生成一个session对象指向这个内存,同时又生成一个sessionid指向这个session。所以是 sessionid -> session -> 内存,这是javaWeb帮我们做的。那么,后端代码验证用户名和密码都正确后,可以将用户相关信息存储到session的这块内存中。

 //密码验证正确后,在session中存储登录的用户名
 session.setAttribute("user","张三");
 //退出登录后,移除用户名
 session.removeAttribute("user");

二、应用

1、在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。
2、当客户端的浏览器禁用了 Cookie,可以使用URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

猜你喜欢

转载自blog.csdn.net/liangxiaoyan0426/article/details/131264765
今日推荐