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 개발에 약간의 경험이 있으며 채널 로그인 요청이 트리거되었을 때 세션 쿠키를 설정하는 방법을 찾지 못했습니다. 이 문제를 해결하는 데 도움을 줄 수 있습니까?
감사합니다.
제우스, 답변 해 주셔서 감사합니다. 코드에서이 요청을 트리거하지 않았으므로, 보낸 client_ping을 방지하기 위해 Flex에 설정이 있습니까? 난 그냥 login()을 호출하고 Flex는이 시퀀스를 생성한다. -> client_ping, login. –
코드에서 어딘가에 Blazeds Consumer를 사용하여 구독하고있는 것 같습니다. 로그인하기 전에 응용 프로그램에 'Consumer'가 호출되지 않았는지 확인할 수 있습니까? 또한 다중 '채널 세트'가 선언되지 않았습니까? – Zeus
예, 로그인 한 후 소비자가이 코드를 제거하고 로그인 조작만으로 단순화 한 후에도 예외없이 다시 돌아옵니다.Btw, 그것은 HTTP보다는 다소 안전한 프로토콜을 사용하면 작동합니다. –