2010-07-16 2 views
4

나는 asp.net 로그인 페이지가 있는데,이 페이지는 초기화 될 때 일부 세션 변수를 설정한다. 사용자가 로그인을 클릭하면 AJAX 요청이 만들어져 사용자를 확인하고 추가 세션 변수를 설정하고 결과를 클라이언트에 반환합니다. 그런 다음 클라이언트는 로그인 결과에 따라 리디렉션됩니다. 리디렉션 된 페이지에서 로그인 페이지가 초기화 될 때 (즉 로그인 전에) 설정된 세션 변수에 액세스 할 수 있지만 로그인 확인 중에 설정 한 세션 변수는 아약스 호출의 일부가 아닙니다.아약스 게시물간에 세션 상태가 손실 되었습니까?

이 예상되는 동작입니까? 왜 ajax 호출이 새로운 세션을 생성하여 데이터를 잃어버린 것입니까?

감사

+0

일부 코드와 사이트 구조를 보여줄 수 있습니까? –

답변

0

응용 프로그램의 나머지 부분과 동일한 응용 프로그램 공간에서 아약스 전화의 위치인가? 내가 올바르게 기억한다면 응용 프로그램간에 세션 정보를 공유 할 수 없습니다. 그게 무슨 일이 일어날 지 몰라.

+0

그 호출은 별도의 어셈블리에 있지만 동일한 전체 사이트/응용 프로그램의 일부인 로그인 사용자 컨트롤의 일부로 호출됩니다. – LDJ

+0

그럴만 한 가치가있었습니다. :-) 아마 Guffa와 Crooy가 추천 한 것과 같이 세션 쿠키가 전달되는지 확인해야 할 것입니다. 아니면 그냥 Ajax 호출을 통해 클라이언트 변수를 통해 모든 것을 전달한 다음 리디렉션 된 페이지로 전달할 수 있습니다. – mwgriffith

0

세션 ID는 쿠키 헤더에 저장되며 응답 헤더에 반환됩니다. AJAX 호출을 수행함에 따라 쿠키는 응답의 일부일뿐입니다. 다른 요청에 대해 동일한 세션을 사용하려면 해당 쿠키를 가져 와서 요청의 헤더에 함께 보내야합니다.

+0

세션 ID는 요청간에 동일합니다. 예를 들어, 나는 넣는다 세션 [ "test"] = "test"; 로그인 페이지의 onLoad 메소드 내부. 그런 다음 양식 유효성 검사 (세션 ID가 동일하고 방금 확인한 값)가 이제 'null'입니다. 다시 설정 한 경우 : 세션 [ "test"] = "새 값"; 그런 다음 리디렉션 된 페이지 (다시, 동일한 세션 ID)를 누르면 세션 [ "test"] = "test"가 다시 발생합니다 !!! 무슨 일이 일어나고 있는지에 대한 아이디어가 있습니까? 나는 혼란스러워! – LDJ

1

일반적으로 브라우저는 ajax 요청과 함께 세션 ID를 보냅니다. Firebug 또는 이와 유사한 것을 사용하는 경우 ajax 요청의 내용을보고 세션 ID가 함께 전송되는지 확인할 수 있습니다.

세션 ID는 쿠키에 저장되며 옵션에 따라 동일한 도메인/호스트 이름에만 사용할 수 있습니다. 이것이 전송되지 않은 이유가 될 수 있습니다.

코드에 따라 세션 ID를 보내지 않으면 새로운 것이 생성됩니다.

+0

위에서 언급했듯이 세션 ID는 전체적으로 일관되지만 로그인 페이지, JQuery Ajax POST 및 리턴 사이에는 다른 모든 것들이 지워지고있는 것처럼 보입니다! – LDJ

관련 문제