岁月如哥
人生非梦
posts - 50,comments - 144,trackbacks - 0
XX系统登录之后,偶尔在用户那会出现这个现象:
 
登录的逻辑是这样的:登陆界面之后,在主界面html执行到最后的时候,使用windows.open打开一个弹出窗口,去服务器取一些需要的数据
但是偶尔用户那会出现弹出窗口又定位到登陆窗口了(summer中使用filter对请求过滤,发现没有登陆的话会重新定位到登陆窗口)。
这里明明是的刚登陆的程序,却出现没有登陆的现象。。这个现象在用户那一直就存在,一直也没找到原因。
今天在和三期应服推广人员的沟通中无意了解到,用户习惯使用给登陆界面建立一个桌面快捷方式,一般操作如下:
在ie地址栏输入“http://localhost:8080/spxt”,这个时候请求完成之后定位到了登陆页面,但是ie地址栏已经变成
“http://localhost:8080/spxt/common/summer/jsp/login/register03.jsp;jsessionid=CA0CA7E455535994E523B01357B42214”
此时直接在这个ie窗口登陆是没有问题的。而用户一般都是在这个页面点右键,选择创建快捷方式,
这个时候就有一个问题,用户的快捷方式超链接实际上指向的是后面那个带有jsessionid的很长很长的url。
如果此时从桌面点击这个超链接的快捷方式打开ie进行登陆,就很容易复现文章开始的那个截图现象了,如果我修改快捷方式属性,把超链接的
sessionid去掉就没有问题了。(这里描述不是很准确,比如重启一次tomcat的话就又不会复现了)。
后来在后台打印每次使用的sessionid,发现如果从快捷方式登陆的话,真正的登录session就是jsessionid所代表的那个session,而后来ajax
请求的是和服务器新建了连接,发现session没有登陆信息就定位到登陆页面了。

这里在服务器端“可能”是产生两个session的概念:一个是本次真正登录的session;另外是一个空的session。而在ajax异步请求的时候,
实际上用的就是后面这个空的session,这样发现没有登陆就重新定位到登陆页面了?

后面原因的分析完全是自己的猜测,具体望大家指教一下:)

解决问题可以这样:1、帮用户把那个快捷方式的jsessionid去掉。
                  2、写一个filter,对于是登陆请求的,把jsessionid去掉。

ps:以上问题对于收藏夹存在同样问题。


看了帖子终于明白jsessionid是怎么来的了~多谢
在struts的org.apache.struts.action.RequestProcessor.processForwardConfig()中找到了如下代码:
response.sendRedirect(response.encodeRedirectURL(uri));
不过感觉一般情况还是不要去掉jsessionid比较好,对于特殊情况的需要特殊去掉,基本还是利大于弊。
posted on 2009-02-25 13:40 岁月如歌 阅读(7004) 评论(3)  编辑  收藏 所属分类: java

FeedBack:
# re: url中jsessionid引起的一个问题
2009-02-25 14:27 | 银河使者
当客户端不支持cookie是,就会使用url来传递sessionid,否则会直接用cookie来传递sessionid。  回复  更多评论
  
# re: url中jsessionid引起的一个问题
2009-02-25 18:28 | yeshucheng
这个就是所谓的页面重定向  回复  更多评论
  
# re: url中jsessionid引起的一个问题
2009-06-23 10:07 | 找个美女做老婆
当客户端不支持cookie是,就会使用url来传递sessionid,否则会直接用cookie来传递sessionid。

Java乐园交流学习社区: http://www.javaly.cn

QQ群:28840096  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: