一、摘要
本文讨论了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;
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冲突。