2014-02-23 1 views
0

Grails + BlazeDS 서버 및 Flex AIR 클라이언트를 개발하고이 오류와 함께 붙어 있습니다 : 일반적으로 원격 호스트가 세션 쿠키를 비활성화하기 때문에 중복 된 HTTP 기반 FlexSession이 감지되었습니다. 클라이언트 연결을 올바르게 관리하려면 세션 쿠키를 사용하도록 설정해야합니다.JSession 쿠키가 삭제되면 https 대신 http를 사용하는 경우 DuplicateSessionDetected 예외가 발생합니다.

상황에 따라 약간의 차이가 있으므로 Google 검색이 성공적으로 수행되지 않았습니다. Flex 클라이언트가 https를 통해 서버와 상호 작용할 때만 발생하는 문제입니다.

플렉스 클라이언트 : UI에서

<s:ChannelSet id="userChannel"> 
      <s:SecureAMFChannel uri="https://localhost:8443/Con/messagebroker/amfpolling" /> 
</s:ChannelSet> 

버튼을 클릭하면 로그인 방법 트리거 :

loginResult.token = channelSet.login(usernameInput.text, passwordInput.text); 

을 그리고 예외를 DuplicateSessionDetected 완료. :(

네트워크 모니터 로그를 조사 후, 나는 그 jsession 쿠키가 서버로 다음 요청에 설정되지 않은 서버에서받은 발견 :

서버에서 응답 (운영 : 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 

그리고 다음 새로운 세션 쿠키와 응답

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*** 

및 서버 : jsession 쿠키없이 서버 (로그인 작업)에 요청

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 

다시 - 안전하지 않은 프로토콜을 모두 사용하면 ok - 세션 쿠키가 예상대로 로그인 작업에서 서버로 전송됩니다.

Flex 개발에 약간의 경험이 있으며 채널 로그인 요청이 트리거되었을 때 세션 쿠키를 설정하는 방법을 찾지 못했습니다. 이 문제를 해결하는 데 도움을 줄 수 있습니까?

감사합니다.

답변

1

가짜!

DuplicateSessionDetected 예외의 원인은 Flash Builder의 네트워크 모니터 도구 때문입니다. 스위치를 끈 후에는 예외가 발생하지 않습니다. 나는 모니터가 보안 프로토콜과 함께 사용될 때 프록시 역할을 할 때 문제가 있다고 생각한다.

0

client_ping 작업을 수행하지 않은 다음 보안 채널 집합을 시도하십시오. 서버에 ping을하면 다른 채널 세트가 만들어지고 (기본적으로 플래시에서 하나를 만듭니다) .login 작업을 사용하여 다른 채널 세트를 여는 중입니다. 서버를 재시동하여 시도해보십시오. (신선한 인스턴스) 그렇지 않으면 더 많은 세션을 생성하게됩니다.

+0

제우스, 답변 해 주셔서 감사합니다. 코드에서이 요청을 트리거하지 않았으므로, 보낸 client_ping을 방지하기 위해 Flex에 설정이 있습니까? 난 그냥 login()을 호출하고 Flex는이 시퀀스를 생성한다. -> client_ping, login. –

+0

코드에서 어딘가에 Blazeds Consumer를 사용하여 구독하고있는 것 같습니다. 로그인하기 전에 응용 프로그램에 'Consumer'가 호출되지 않았는지 확인할 수 있습니까? 또한 다중 '채널 세트'가 선언되지 않았습니까? – Zeus

+0

예, 로그인 한 후 소비자가이 코드를 제거하고 로그인 조작만으로 단순화 한 후에도 예외없이 다시 돌아옵니다.Btw, 그것은 HTTP보다는 다소 안전한 프로토콜을 사용하면 작동합니다. –

관련 문제