一个页面两个session的问题分析
2010-03-17 19:16
363 查看
本例为一个特例。
背景:
Linux服务器,Apache+tomcat。Java Web工程文件放在webapps路径下。由于除了java工程外还有别的几个Web项目,使用Apache作为http服务器。Java工程采用SSH架构,用到extjs,flex等。
将某域名和Java工程目录绑定。
有时会出现Flex页面无法获得session中数据的问题,而无论是开发调试过程中还是其它Windows服务器上均没有出现该问题。
排查:
考虑到也许存在路径设置问题引起Windows和Linux下的不同。对于java代码的排查进行了一天,包括Session变量赋值,重置和取出,包括所有路径设置,没有发现任何问题。 使用HttpFox对页面Http信息进行抓取,发现在进入Flex页面时会得到两个jsessionid,被取的session不是原有session,自然不能获得session数据。
在另一台Linux机器上就安装tomcat,采用默认设置,没有任何问题,排除上面一条的猜测 。问题必然出现在Linux服务器上,并且应该是Http或Web服务器配置问题。
停掉Apache,直接使用tomcat的Web配置(注:此时的配置并没有将域名和webapps下的工程路径绑定,但当时还没有注意到这个问题),使用IP+路径名的方式访问Web页面。Flex页面变为只有一个session。
重新启用Apache,不进行域名绑定IP,一个session。
仅用域名绑定IP, 一个session;域名绑定IP+路径名,连个session!
到此,终于定位到连个session的配置条件,可是为什么会这样呢?
此前,出现过这样的问题:即更改项目名称,则Flex页面不能正常进行数据通信。简单地进行源代码全文 查找,没有发现任何硬编码。此次再次尝试,发现仍然是这个问题,可是源文件里没有硬编码又是怎么回事呢?
经过排查,发现进行数据通信的配置文件services-config.xml中,有设置路径context.root:
代码<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint url="http://{server.name}:{server.port}/{context.root}/spring/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
而该路径又是在FlexBuilder的配置中设的,其命令为:
-services "services-config.xml" -context-root "HelloBlazeds"
由于此前编译时context.root为一个固定的字符串,此后一直使用编译所得二进制文件。所以,当服务器使用域名绑定webapps下的项目名时,即——若访问URL中可以不需要加入项目路径名时,Flex执行时会因此多生成一个session,与之前session不同,于是原session中的数据无法被取到。
解决方案:
去掉路径context.root,重编译Flex文件。若设置URL不需要加入项目名称时,使用这一套编译后的Flex二进制文件。(此方案目前暂时没有测试,本次更改为备份原以Skyeye为context.root的配置和编译后的文件。)
背景:
Linux服务器,Apache+tomcat。Java Web工程文件放在webapps路径下。由于除了java工程外还有别的几个Web项目,使用Apache作为http服务器。Java工程采用SSH架构,用到extjs,flex等。
将某域名和Java工程目录绑定。
有时会出现Flex页面无法获得session中数据的问题,而无论是开发调试过程中还是其它Windows服务器上均没有出现该问题。
排查:
考虑到也许存在路径设置问题引起Windows和Linux下的不同。对于java代码的排查进行了一天,包括Session变量赋值,重置和取出,包括所有路径设置,没有发现任何问题。 使用HttpFox对页面Http信息进行抓取,发现在进入Flex页面时会得到两个jsessionid,被取的session不是原有session,自然不能获得session数据。
在另一台Linux机器上就安装tomcat,采用默认设置,没有任何问题,排除上面一条的猜测 。问题必然出现在Linux服务器上,并且应该是Http或Web服务器配置问题。
停掉Apache,直接使用tomcat的Web配置(注:此时的配置并没有将域名和webapps下的工程路径绑定,但当时还没有注意到这个问题),使用IP+路径名的方式访问Web页面。Flex页面变为只有一个session。
重新启用Apache,不进行域名绑定IP,一个session。
仅用域名绑定IP, 一个session;域名绑定IP+路径名,连个session!
到此,终于定位到连个session的配置条件,可是为什么会这样呢?
此前,出现过这样的问题:即更改项目名称,则Flex页面不能正常进行数据通信。简单地进行源代码全文 查找,没有发现任何硬编码。此次再次尝试,发现仍然是这个问题,可是源文件里没有硬编码又是怎么回事呢?
经过排查,发现进行数据通信的配置文件services-config.xml中,有设置路径context.root:
代码<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint url="http://{server.name}:{server.port}/{context.root}/spring/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
而该路径又是在FlexBuilder的配置中设的,其命令为:
-services "services-config.xml" -context-root "HelloBlazeds"
由于此前编译时context.root为一个固定的字符串,此后一直使用编译所得二进制文件。所以,当服务器使用域名绑定webapps下的项目名时,即——若访问URL中可以不需要加入项目路径名时,Flex执行时会因此多生成一个session,与之前session不同,于是原session中的数据无法被取到。
解决方案:
去掉路径context.root,重编译Flex文件。若设置URL不需要加入项目名称时,使用这一套编译后的Flex二进制文件。(此方案目前暂时没有测试,本次更改为备份原以Skyeye为context.root的配置和编译后的文件。)
相关文章推荐
- 解决一个页面有两个FCKeditor时,无法使用FCKeditorAPI.GetInstance问题
- 如果一个页面中用了两个以上displaytag,需要注意的分页问题
- 一个Web页面的问题分析
- 一个Web页面的问题分析
- 一个Web页面的问题分析
- 【同一个Server Weblogic两个Domain CookieName冲突导致session失效问题】【关于WebLogic的Session丢失的问题】
- javaweb之Session简单例子(两个页面一个存数据,一个取数据)和session的一些基本内容
- 一个表单提交纠错引起的问题,session在上级页面继承
- 同一个页面中两个框架之间的链接问题
- 一个Web页面的问题分析
- 一个Web页面的问题分析
- 9.在数学计算或数字分析中,经常会用到计算两个数的最大公约数的问题。即:输入两个正整数,当两个数字有一个不是正整数时会产生异常。当输入非整数数字时,也产生异常。输入无错误后,可计算两个数的最大公约数。
- 当session长时间不登录失效问题,再重登录出现两个嵌套登录页面
- 一个Web页面的问题分析
- 提交表单,有两个页面,一个是系统日志,一个是运行日志,其中日志类型不能用同一个"name",否则其中一个会出现404页面,可能是缓存问题吧(API?)
- 问题:避免销毁session后,浏览器可以返回上一个带数据的页面
- 当session长时间不登录失效问题,再重登录出现两个嵌套登录页面
- 一个Web页面的问题分析 转载的不错,可以学习一下
- 火狐、谷歌浏览器,页面中两个iframe 只显示一个的问题
- 一个Web页面的问题分析