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比较好,对于特殊情况的需要特殊去掉,基本还是利大于弊。
分享到:
相关推荐
在Web开发中,`jsessionid`是一个常见的概念,它关联到Java服务器会话(Session)的管理。本文将深入探讨`jsessionid`存在的问题以及相应的解决方案,并结合提供的`DisableUrlSessionFilter.java`和`web.xml`文件来...
当用户访问一个需要会话支持的Web应用时,服务器会在响应中通过Set-Cookie头部将`jsessionId`发送给客户端(通常是浏览器或Android应用),客户端则将其保存在Cookie中,并在后续的请求中自动附带这个标识,以便...
### Tomcat中修改JSessionID在Cookie中的名称 在Tomcat服务器中,默认情况下,用于传递会话标识(即JSessionID)的Cookie名称为“JSESSIONID”。有时,出于安全考虑或其他需求,我们可能需要自定义这个名称。本文将...
在Java Web开发中,`jsessionId`是服务器为了区分不同的用户会话而分配的一个唯一标识符。它通常会被添加到URL中或者通过Cookie传递。然而,在某些情况下,我们可能不希望URL中含有`jsessionId`,例如出于安全性的...
重定义URL 使其直接进去网页 不用登录 用于:邮件链接直接进入网站
在这种情况下,搜索引擎会选择其中一个URL作为标准URL(canonical URL),并将其他变体视为其副本。 #### 四、不同服务器下的URL重写规则 根据使用的服务器类型不同,URL重写的方式也会有所不同。常见的服务器如...
经过资料查找,发现问题是因为:IP相同认为是同一个域,接收了B的set-cookie指令,把对应的cookie内容覆盖了,其中包括jsessionid,造成A的session丢失。 如果IP不同,则不会发生这个问题。IP相同的两个session对应的...
在登录时,服务器通常会生成一个Session ID,并通过Cookie将这个ID返回给客户端。后续的请求,客户端需要携带这个Session ID,以便服务器识别出这是同一用户。 在Java中,HttpURLConnection并不直接支持session管理...
在 CASClient 中,可以配置一个统一的注销 URL,当用户注销时,可以将用户重定向到这个 URL,从而实现统一注销。 配置 CASClient 为了实现单点登录和统一注销,需要在 web.xml 中进行相应的配置。需要配置 ...
Cookie 路径属性暴露问题可能会导致安全风险,解决这个问题可以通过从代码解决或从容器本身解决两种思路。从代码解决可以通过设置 Cookie 的路径属性来处理问题,而从容器本身解决可以通过配置容器的设置来处理问题...
在构建分布式系统时,尤其是采用nginx作为反向代理服务器和tomcat作为应用服务器的架构,一个常见的挑战是如何在集群环境中保持用户的会话(session)一致性。`标题`中提到的"使用redis解决nginx+tomcat8负载均衡...
JSESSIONID是一个由服务器分配的唯一标识符,用于跟踪用户的会话状态,尤其是在使用HTTP无状态协议时。这个标识符通常通过cookie在客户端和服务器之间传递。然而,由于浏览器兼容性问题或安全需求,有时我们需要在...
在Web开发中,会话管理是一个至关重要的概念,主要解决的是HTTP协议无状态性的挑战。HTTP协议本身不保存任何关于客户端会话的信息,这意味着服务器无法区分来自同一用户的连续请求。为了克服这个问题,开发者采取了...
表单隐藏字段则是服务器在表单中添加一个隐藏的字段,字段名通常为“jsessionid”,值为Session ID。虽然表单隐藏字段已较少使用,但在某些旧系统或特定场景下仍然可见。 5. **Session的生命周期**: 服务器并不会...
在使用JSP开发的Web应用中,开发者可能会遇到一个令人困惑的问题:当用户使用Firefox浏览器时,基于Session的单点登录(Single Sign-On, SSO)功能表现正常;然而,切换至IE6浏览器时,初始阶段一切正常,但进行几次...
当用户在一个域(例如,域A的9000端口应用CA)登录后,再访问另一个域(如域B的8000端口应用CB),返回原域A时可能会发现Session丢失。此外,如果应用CA内有链接直接跳转到应用CB,同样可能导致Session丢失。这种...
服务器会在创建Session的同时生成一个唯一的Session ID,并将其存储在一个名为`JSESSIONID`的Cookie中。客户端浏览器会自动在每个后续请求中携带该Cookie,这样服务器就能识别出是哪个用户的请求。需要注意的是,...
在上面的示例代码中,我们首先创建了一个HttpClient实例,然后设置了要访问的URL,接着创建了一个GetMethod对象,并执行了GET请求。最后,我们读取了服务器返回的响应结果,并将其输出到控制台。 在下面的章节中,...
在Web.Config文件中配置`sessionState`元素,设置`mode`属性为`StateServer`,并指定`stateConnectionString`,这使得Session数据不在本地存储,而是通过TCP/IP连接到一个独立的State Server服务,从而避免了由于...
`Session`是Web开发中的一个重要概念,特别是在基于Java的服务器端编程中。它是一种在服务器端存储用户状态的方法,解决了HTTP协议无状态的特性。以下是对`Session`生命周期、何时失效以及对浏览器要求的详细解释。 ...