HttpSession原理及Session冲突

版权声明:文章出自http://www.guanjianzhuo.com/ - 欢迎访问、评论、留言! https://blog.csdn.net/guanjianzhuo/article/details/81744929

一、摘要

        本文讨论了web服务器靠session id识别客户端。以及透过原理分析session冲突的原因,发现session冲突的原因是保存session id信息的cookie发生了冲突。

        以下说到的Session特指Web应用下的Session会话。

二、Session原理

1、什么是Session

        Session是一个服务端会话技术,利用这个技术,服务器能够识别与之通讯的客户端。该客户端与服务端交互过程中,一些信息可以保存在Session中。

2、Session实现原理

        Web服务器对浏览器的识别是建立在Cookie上面的,Session由服务端生成,其token(也就是session id)会保存在浏览器上。具体的客户端识别流程如下:

                                                                                    (图1:Web服务器识别浏览器流程)

        当用户使用浏览器访问web服务时,web服务会查找内存中是否有对应的session对象,如果有,则通过session id可以找到,如果没有,则web服务会为浏览器创建一个session对象,并生成session id。session id会返回到浏览器上使用cookie保存起来,浏览器下次请求的时候把该cookie带上则可以被web服务识别了。

三、Session冲突出现原因及解决

1、Session冲突出现原因

        在浏览器中,cookie的保存是以域名进行划分的,如:

        domain a:

               token1=xx;

               token2=xx;

扫描二维码关注公众号,回复: 3196916 查看本文章

        doamin b:

               token1=xx;

               token2=xx;

        因此,如果存在两个web应用使用同一个域名,不同端口进行访问,刚好cookie的Key值也相同,其cookie就会出现冲突,如果这个cookie保存的是session信息,则session就会出现冲突。

2、Session冲突如何解决

        从前面的分析可以看出,要避免session冲突,关键是避免cookie冲突,如果一定要使用相同的域名,则可以重新定义存储session id信息的cookie的key值。

        在tomcat中,可以在配置文件中修改Context标签,添加cookieSessionName属性,即<Context cookieSessionName=”xx”>,则可以重新定义该应用session对应的cookie key值。

        如果使用其它的web server,也可以自行搜索相关的配置修改方法,总之关键在于避免cookie冲突

四、总结

        整篇文章的讨论是围绕着保存session id信息的cookie展开的,服务器只要能够识别session id则能够找到对应的session。session冲突的根源在于浏览器保存的cookie的冲突,要解决session冲突的思路是重新定义cookie的key值,避免cookie冲突。

猜你喜欢

转载自blog.csdn.net/guanjianzhuo/article/details/81744929
今日推荐