Mar*_*itt 5 apache-flex blazeds lcds
我有一个flex/LCDS堆栈,我发现在注销后,我经常(但不总是)开始Duplicate HTTP Session在客户端上接收错误.
这是堆栈的重要事实:
mx.messaging.FlexClient保持初始化)per-client-authentication设置为false- 我们正在尝试实现SSO(与CAS集成),因此用户原则绑定到JSession.以下是我目前关于导致问题的理论:
amflongpolling最后两个调用会产生冲突,LCDS FlexClient看起来与2个JSession相关.
结果,收到了以下错误:
Server.Processing.DuplicateSessionDetected检测到重复的基于HTTP的FlexSession,通常是由于远程主机禁用会话cookie.必须启用会话cookie才能正确管理客户端连接.
注意:我已经能够在独立项目中重新创建问题. 我认为这不是我们的应用程序特定代码的问题,而是由状态/会话性质以及共享同一会话的多个选项卡之间的冲突引起的.
总之,我认为问题是由于来自一个选项卡的调用导致服务器上的会话无效,但是在将响应发送到浏览器以通知新的JSession之前,调用是在旧的Jsession下发出的. .
什么是适当的策略来抵御这个重复的会话问题?
为了澄清,虽然场景类似于此处讨论的场景,但存在微妙的差异,这使得该文章中的解决方案不合适.
具体来说,本文讨论了通过使用JSP或协调的RemoteObject调用控制跨两个浏览器的JSession 的初始创建来防止重复会话.
Flex实际上通过阻止出站RemoteObject调用来协助此过程,直到DSid定义了本地FlexClient 变量,表明初始会话已建立.
我的方案有所不同,因为JSession(和相关的LCDS FlexSession /客户端FlexClient对象)已经建立一次(使用该文章中讨论的技术),然后通过注销失效 - 这些调用session.invalidate()- 破坏了JSession.
当Tab2使用陈旧的JSession发送调用时,会出现问题,这是一个重复的HTTP会话错误.然后情况变得复杂,因为当LCDS抛出DuplicateHTTPSession错误时,它也使与客户端连接的所有已知Jsessions无效,这意味着Tab1 - 一直没问题 - 现在有一个陈旧的JSession.Tab1下次发送呼叫时,IT会导致DuplicateHTTPSession错误,并且循环重复.
不幸的是,Flex框架挂钩用于在建立sesssions时延迟调用没有简单的方法(我发现)一旦设置就重新启用.(我试过以下,无济于事:)
// Reset DSid to get a new FlexSession established on LCDS
use namespace mx_internal
public function resetFlexSession()
{
FlexClient.getInstance().id = null;
// Note - using FlexClient.NULL_ID also doesn't work.
}
Run Code Online (Sandbox Code Playgroud)
本文标题为“避免 LCDS 中重复会话检测到的错误”,深入解释了您遇到的情况。这是一个相关的引用:
\n\n\n\n\n...[LCDS] 认为它收到请求的 FlexClient 已经与服务器上的另一个会话关联。
\n
\n 为了让客户端应用程序确保应用程序中的 FlexClient 不会\xe2\x80\x99 进入这种不良状态,客户端应用程序必须\n 确保在\n 多个会话之前已在服务器上建立会话。 FlexClient 同时连接到服务器。
建议采用多种方法来解决此问题,包括:
\n\n"The jsp page could both create a session for the client application and return an html wrapper to the client which would load the swf.""which would automatically create a session for the client application on the server"| 归档时间: |
|
| 查看次数: |
2708 次 |
| 最近记录: |