2012-01-04 3 views
1

특정 이유 때문에 호스팅 서버와 이상하게 상호 작용하는 순간이 있습니다.쿠키가없는 HttpSession

응용 프로그램은 더 큰 포털을 통해 액세스 할 수 있으며 포털 디스플레이에서 캡슐화 할 수 있지만 포털이 가로 챌 수없는 AJAX 요청을 광범위하게 사용합니다. 이러한 요청은 호스팅 서버에 직접 이루어 지지만 문제가 발생합니다. 첫 번째 아약스 요청이 만들어

을 (그것에서받은 것보다 다른 서버에이를 보내는 것 같이 명백하게) Ajax 요청이와 함께 JSESSIONID 쿠키를 운반되지 않는 (응용 프로그램의 흐름에 약간의 방법)

AJAX 호출이 상호 작용해야하는 세션을 찾는 좋은 방법이 있습니까? grails.views.enable.jsessionid를 true로 설정하려고했지만 브라우저가 쿠키를 허용하지 않는 경우에만 작동합니다.

답변

0

가장 신뢰할 수있는 방법은 자신의 "쿠키"를 설정하고이를 요청과 함께 전달하는 것입니다.

포털과 그 쿠키로 인해 문제가 발생하여 다른 서버에 "세션"을 계속해야하는 것처럼 들립니다. 응용 프로그램은 "정상적인"쿠키로 인해서 밟히지 않도록 세션 자체를 처리해야합니다.

포털이 응용 프로그램에서 요청을 보내면 응용 프로그램에서 세션 토큰을 작성한 다음 응용 프로그램을 호출하면 응용 프로그램이 다시 토큰을 포함하도록 만들어야합니다. 그런 다음 사용할 토큰과 세션을 쉽게 연관시킬 수 있습니다.

좀 더 강력하고 애플리케이션 수준 이상으로 처리하려는 경우 Grails가 스프링 MVC에 내장되어 있으며 기본 세션 핸들러를 무시하여 무엇이든 사용할 수 있습니다 메커니즘을 선택하십시오. Grails로 정확히 어떻게할지는 모르겠지만 Spring MVC 프로젝트에서 비슷한 일을 해왔습니다. 일단 프레임 워크의 다양한 주입 점을 머리에 감싸면 너무 힘들지 않습니다.

이론상으로는 이론 상으로는 세션과 같은 오래된 "처리 된"작업에 필요한 추가 복잡성보다 중요합니다.

+0

세션 쿠키가 원점에서 포털을 통해 사용자에게 전달되지 않는다는 것이 그의 질문에서 비롯된 것 같습니다. 그가 메인 요청에 포털을 통해 다시 쿠키를 추가 할 수 없다면 이는 작동하지 않습니다. 포털이 근본적으로 바보 같은 프록시 인 경우, 이는 불행히도 놀라운 일은 아닙니다. – PlexQ

+0

@PlexQ - 그렇습니다. 그래서 "쿠키"가 따옴표 안에 들어 있습니다. 그것은 일반적인 쿠키가 아니지만 하나처럼 작동합니다. 그것은 일련의 요청에 대해 어떤 세션이 사용되어야 하는지를 애플리케이션에 식별하는 대체 방법을 사용하는 나의 응답의 핵심입니다. 모든 경우에서, 그것은 여전히 ​​동일한 개념이며, 다른 구현입니다. – cdeszaq

+0

언급 된 '쿠키'가있는 솔루션을 찾으십시오. 세션 리스너를 구현하고 세션 ID를 캡처하고, 해당 세션 키 아래 servletContext에 필요한 최소 컨텍스트를 저장합니다.그런 다음 각 Ajax 요청에서 세션 키를 전달하고 servletContext에있는 세션에 대해 요청의 유효성을 검사합니다. 지금은 한 서버에서 작동하지만 여러 서버로 확장해야 할 때 좀 더 강력하게 재검토해야합니다. 나는 ehcache 복제가 내 친구가 될 수 있다고 생각한다. – kblair

1

첫 번째 요청에서 포털로 다시 보내는 페이지에서 jsessionid가있는 숨겨진 양식 입력 값을 만듭니다. 그런 다음 폼 변수를 읽고 AJAX 요청을 만드는 자바 스크립트 코드에서 쿠키를 설정하십시오.

나는 이것이 이미 작동하고 있다고 생각하는데, 크로스 사이트 스크립팅은 문제가되지 않습니까? 메인 페이지의 출처가 아닌 도메인에 대한 AJAX 요청은 브라우저에 의해 차단됩니다.