2011-01-18 13 views
8

Mam dwie witryny z własnymi dostawcami członkostwa, które są hostowane na tym samym serwerze w tej samej sieci w różnych aplikacjach internetowych i różnych pulach aplikacji.asp.net "Zapamiętaj mnie" już nie działa z uwierzytelnianiem formularzy

Dawniej miałem problem, że nie mogłem zalogować się na obu stronach razem. Dzięki Remy's post, działa to teraz, musiałem dodać atrybut name do elementu forms.
Ale teraz mam problem, że opcja "pamiętam-mnie" kontrolki logowania asp przestała działać. Użytkownik jest wylogowywany po normalnym czasie sesji.

uwierzytelniania w atrybuty wyglądu pliku web.config w następujący sposób:

<authentication mode="Forms" > 
    <forms loginUrl="~/UserMgmt/Login.aspx" timeout="400000" slidingExpiration="true" name="NameOfTheSite"/> 
</authentication> 

mieć również ustawić nazwę pliku cookie na formach authetication do różnych nazwach.

Czy jest jeszcze coś, co muszę dodać, aby funkcja "pamiętam-ja" działała?

Aktualizacja
Zauważyłem, że jeśli wyłączyć szyfrowanie i walidacji formularzy uwierzytelniania Cookie, problem znika. Jeśli aktywuję szyfrowanie, sprawdzanie poprawności lub oba, problem pojawia się ponownie.
Wiem również, że jest niezależny od nazw plików cookie sesji (mogą nawet być identyczne). Może ta informacja pomaga komuś dowiedzieć się, co się dzieje?

Aktualizacja 1
Podziękowania dla Jason Kealey za rozwiązanie tego problemu. Nigdy bym go nie znalazł. W międzyczasie znalazłem odpowiednie informacje w msdn. W How To: Configure MachineKey in ASP.NET 2.0 w rozdziale „Czynniki Web Deployment Farm” jest napisane:

Jeśli chcesz izolować aplikacji z innych aplikacji na tym samym serwerze, umieść <machineKey> w pliku Web.config dla każdej aplikacji na każdym serwer w gospodarstwie. Upewnij się, że używasz oddzielnych wartości kluczy dla każdej aplikacji, ale duplikuj klucze każdej aplikacji na wszystkich serwerach w farmie.

+0

To, co mam. Czy usunąłeś istniejące ciasteczka? – Remy

+0

@Remy: Nie, nie zadziałało, ale w każdym razie to był dobry pomysł! – HCL

+0

co się stanie, jeśli zmienisz limit czasu na około 7 dni (10080) zamiast 277 (400000) dni? –

Odpowiedz

9

Problem może być, że masz klucze walidacji, które są generowane automatycznie przy każdym uruchomieniu proces roboczy. Plik cookie jest zaszyfrowany, ale po powrocie używany jest nowy klucz po stronie serwera, dlatego nie można odszyfrować pliku cookie.

Zapoznaj się sekcja MachineKey http://msdn.microsoft.com/en-us/library/ff649308.aspx

Oto coś, co będzie generować sekcję MachineKey Ci http://www.qualitydata.com/products/aspnet-membership/help/configuration/no-machinekey.aspx

+0

Muszę przyznać, że nie rozumiem, co twoja odpowiedź oznacza (ponieważ moja wiedza na temat asp.net jest tylko mała). Co to jest proces roboczy i dlaczego jest ponownie uruchamiany. Czy jest to proces, w którym usługi IIS są hostowane w Internecie? Jeśli tak, dlaczego ten problem występuje tylko wtedy, gdy mam dwóch dostawców członkostwa. Jeśli mam tylko jedną, wszystko działa dobrze. Ponadto, jeśli czytam połączone dokumenty, wszyscy mówią, że powinienem skonfigurować sekcję klucza komputera, jeśli moja aplikacja działa w farmie sieciowej lub jeśli chcę udostępnić login między aplikacjami. Ale nie chcę żadnego z nich, wyraźnie nie dzieląc logowania między aplikacjami. – HCL

+0

Biorąc pod uwagę, że wyłączenie sprawdzania poprawności powoduje, że wszystko działa, uważam, że za każdym razem, gdy puli aplikacji (proces roboczy IIS) jest resetowany, generuje nowy klucz, którego używa do sprawdzania cookie użytkownika po powrocie do witryny. Może zostać zresetowany z powodu braku aktywności lub z wielu powodów. (A nowy klucz nie może odszyfrować zawartości z poprzedniej wizyty, ponieważ nie jest taki sam jak początkowy). Spróbuj dodać coś wygenerowanego za pomocą powyższego narzędzia i daj nam znać, czy to działa. –

+0

Uważam to za najbardziej prawdopodobne rozwiązanie, biorąc pod uwagę fakty. – Greg

2

Spróbuj ustawić nazwę domeny, aby upewnić się, że plik cookie z zapamiętania jest ustawiona poprawnie we wszystkich przypadkach

<forms path="/" domain="nameof.com" ...the rest 
+0

+1 Bez powodzenia również z tym, ale precyzowanie domeny i szczególnie ustawienie ścieżki było próbą sprytną. – HCL

+0

@HCL sprawdź także anonimowe ustawienia plików cookie. – Aristos

0

Timeout cookie jest również ograniczona przez IIS i domyślne do czegoś niskiej jak 20 min. Aby to zmienić:

  1. Otwórz Menedżera usług IIS.
  2. Kliknij prawym przyciskiem myszy swoją witrynę i wybierz właściwości .
  3. Wybierz kartę ASP.NET i kliknij opcję Edytuj konfigurację.
  4. Wybierz kartę Uwierzytelnianie.
  5. Wybierz opcję Włącz wygasanie ważności.
  6. Ustaw limit czasu pliku cookie na dłuższą wartość: . Aby ustawić na 30 dni, wpisz 30.00: 00: 00.
  7. Kliknij przycisk OK i zamknij Menedżera usług IIS.

enter image description here

Powiązane problemy