2011-02-01 5 views
1

MVC 3 앱에서 DotNetOpenAuth와 함께 openid-selector를 사용하고 있습니다. 세션 변수를 설정하고 DotNetOpenAuth 섹션이 web.config에있을 때마다 세션 변수가 리디렉션 후에 고정되지 않습니다.DotNetOpenAuth ASP.NET MVC 3 세션 문제

나는 Session.SessionID 변수를 검사했는데 여전히 동일하므로 (나는 믿는다.) 같은 세션에있다.하지만 리다이렉션 후에 설정 한 세션 변수를 체크하면 null로 설정된다.

이 문제는 다른 사람을 보지 못했습니다. DotNetOpenAuth 그냥 MVC 3 준비가 아직 경우 궁금. DotNetOpenAuth의 최신 버전도 사용하고 있습니다. 여기

은 도움이 경우의 Web.config의 관련 부분은 다음과 같습니다

<configSections> 
    <section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 
    <section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true"/> 
    </configSections> 
    <uri> 
    <idn enabled="All"/> 
    <iriParsing enabled="true"/> 
    </uri> 
    <system.net> 
    <defaultProxy enabled="true"/> 
    <settings> 
     <servicePointManager checkCertificateRevocationList="true"/> 
    </settings> 
    </system.net> 
    <dotNetOpenAuth> 
    <openid> 
     <relyingParty> 
     <security requireSsl="false"/> 
     <behaviors> 
      <add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth"/> 
     </behaviors> 
     </relyingParty> 
    </openid> 
    <messaging> 
     <untrustedWebRequest> 
     <whitelistHosts> 
      <add name="localhost"/> 
     </whitelistHosts> 
     </untrustedWebRequest> 
    </messaging> 
    <reporting enabled="true"/> 
    </dotNetOpenAuth> 

업데이트 :

내가 ASP를 실행할 때이 중 하나를 IIS에서, 내 개발 서버에서 일어나는, 또는. NET 개발 서버.

또한 상태 서버를 사용하여 세션을 실행중인 상태에서 실행하려고 시도했지만 별 효과가 없었습니다.

새 세션과 관련하여 session_start 이벤트를 검사했는데 호출되지 않았습니다. 또한 Session.IsNewSession을 확인했고 false도 반환했습니다. 그래서 뭔가 무작위로 (또는 무작위로) 내 세션 변수를 삭제하는 것입니다!

답변

1

여기에서 문제를 발견했습니다. 분명히 MVC2는 내가 방금 처리 한 다음 리다이렉션을 한 내 작업에 대한 견해를 갖고 있는지 신경도 쓰지 않았다.

MVC3에서 시작한 나의 업그레이드 후 내 작업에 대한보기가 없으면 페이지에 오류가 등록되고 일단 오류가 발생하면 프레임 워크는 방금 설정 한 세션 변수를 저장하지 않았습니다.

간단한 수정 ...보기를 추가 한 다음보기에 오류가 없는지 확인하십시오.

0

이렇게하면됩니다. 난 아무 문제없이 ASP.NET MVC 3 DotNetOpenAuth 사용 해왔다. 사용자가 인증을 위해 원격 사이트에있는 동안 세션이 만료되지 않는지 확인하고자 할 수 있습니다. 동일한 SessionId를 얻는다 고해서 그것이 세션이 만료되지 않았 음을 의미하지는 않습니다. 이는 서버가 AppDomain을 다시 시작하는 경우에도 발생할 수 있습니다.

+0

대답을 고맙게 생각합니다. 문제는 IIS에서 또는 ASP.NET 개발 서버를 실행할 때 내 개발 서버에서 발생하는 것입니다. 무슨 일이 일어나고 있는지 이해하지 마십시오. DotNetOpenAuth를 제거하면 모든 것이 작동합니다. 세션이 다시 시작되는지, 그리고 세션이 다시 시작되는지 알아보기 위해 좀 더 조사 할 것입니다. – Darye

1

가장 좋은 대답은 아니지만, 나는 그것이 어떤 이유로 세션 변수를 죽이는 response.redirect라는 것을 알아 냈습니다.

그래서 방금 대신 자바 스크립트 리다이렉트를 만들었고, 세션은 유지되며 모든 것이 잘 작동합니다. 아직도 진짜 문제가 여기에 무엇인지 모르겠지만, 이봐, 나는 그것을 하루 종일 알아낼 필요가 없습니다.

+0

홈 스푼 리디렉션을주의하십시오. DotNetOpenAuth는 메시지 페이로드의 크기에 따라 301 리디렉션 또는 자바 스크립트 리디렉션 자체를 사용할 수 있습니다. 이 작업을 스스로 수행한다면, DotNetOpenAuth에서 얻을 수있는이 다양성에 직면하여 코드가 탄력적으로 발휘되기를 바랍니다. –

+0

트위터 oAuth 콜백 이후에도 동일한 문제가 발생합니다. 내가 자바 스크립트 리디렉션을 시도하고 그 wortks 있는지 확인합니다. – jeremcc

0

DotNetOpenAuth는 코드베이스의 어느 곳에서나 Session.Abandon 또는 Session.Clear이 아닙니다. 쿠키를 설정하는 경우 이후에 쿠키가 손실 될 클라이언트로 리디렉션이 전송되었을 수 있습니다. 세션 변수는 일반적으로 개별적으로 쿠키로 유지되지 않으므로 세션 쿠키로 만들면 (그리고 분명히 가지고있는 것 같다면) 나머지 국가도 거기에 있어야합니다.

자신의 세션 저장소를 구현하고 실제로 진행중인 작업을 모니터링하여이를 조사하는 것은 흥미로운 일입니다.