【发布时间】:2014-02-23 11:03:01
【问题描述】:
我开发 Grails+BlazeDS 服务器和 Flex AIR 客户端并遇到此错误: 检测到重复的基于 HTTP 的 FlexSession,通常是由于远程主机禁用了会话 cookie。必须启用会话 cookie 才能正确管理客户端连接
Google 搜索没有成功,因为我发现情况有所不同。 我只有在 Flex 客户端通过 https 与服务器交互时遇到的问题。
Flex 客户端:
<s:ChannelSet id="userChannel">
<s:SecureAMFChannel uri="https://localhost:8443/Con/messagebroker/amfpolling" />
</s:ChannelSet>
UI 中的按钮点击触发登录方法:
loginResult.token = channelSet.login(usernameInput.text, passwordInput.text);
并以 DuplicateSessionDetected 异常结束。 :(
在调查网络监视器日志后,我发现从服务器收到的 jsession cookie 未在对服务器的下一个请求中设置:
来自服务器的响应(操作:client_ping)
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=F58F1ADA97E70915EF9E6E4EE1AEBE00; Path=/; Secure
Content-Type: application/x-amf
Content-Length: 173
Date: Sun, 23 Feb 2014 10:17:00 GMT
Flex Message (flex.messaging.messages.AcknowledgeMessageExt) clientId = EA18E8B9-951F-6F87-7B47-48B8B202EE75 correlationId = 7D2782C1-C8A5-41A3-2055-5E3F771424C8 destination = null messageId = EA18E8F6-9E0E-1FE4-0D26-6F0E602F5C5E timestamp = 1393150620542 timeToLive = 0 body = null hdr(DSMessagingVersion) = 1.0 hdr(DSId) = EA18E8B9-950B-4B42-EF70-369D656BA3F2
下一个对服务器的请求(登录操作)没有 jsession cookie:
POST /Conn/messagebroker/amfsecure HTTP/1.1
Referer: app:/BlazeDSClient.swf
Accept: text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, text/css, image/png, image/jpeg, image/gif;q=0.8, application/x-shockwave-flash, video/mp4;q=0.9, flv-application/octet-stream;q=0.8, video/x-flv;q=0.7, audio/mp4, application/futuresplash, */*;q=0.5
x-flash-version: 12,0,0,68
Content-Type: application/x-amf
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Windows; U; en) AppleWebKit/533.19.4 (KHTML, like Gecko) AdobeAIR/4.0
Host: localhost
Content-Length: 299
Flex Message (flex.messaging.messages.CommandMessage) operation = login clientId = null destination = auth messageId = 7B47BBF2-08C0-0E41-5D88-5E3F76FA4882 timestamp = 0 timeToLive = 0 ***not printing credentials***
服务器使用新的会话 cookie 应答:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=03BD8347F9E9511C299B717DD55625C9; Path=/; Secure
Content-Type: application/x-amf
Content-Length: 535
Date: Sun, 23 Feb 2014 10:17:01 GMT
Flex Message (flex.messaging.messages.ErrorMessage) clientId = null correlationId = 7B47BBF2-08C0-0E41-5D88-5E3F76FA4882 destination = auth messageId = EA18F4A7-C80D-103B-F8D0-58B6F148F142 timestamp = 1393150621768 timeToLive = 0 body = null code = Server.Processing.DuplicateSessionDetected message = Detected duplicate HTTP-based FlexSessions, generally due to the remote host disabling session cookies. Session cookies must be enabled to manage the client connection correctly. details = null rootCause = null body = null extendedData = null
再一次 - 当使用非安全协议时一切正常 - 会话 cookie 按预期在登录操作中发送到服务器。
我在Flex开发方面有一点经验,在触发频道登录请求时没有找到任何设置会话cookie的方法。你能帮忙解决这个问题吗?
谢谢!
【问题讨论】:
-
嗨,我遇到了一个类似的问题,即请求中的 HTTPS 中删除的 cookie (JsessionId)。但是我已经自定义了 Flash 并且没有使用 Flash builder 的网络监视器工具。你知道可能出了什么问题吗?感谢您的评论和帮助。谢谢
标签: apache-flex https blazeds sessionid