2011-01-18 14 views
8

Ho due siti Web con provider di appartenenza autoprodotti che sono hostet sullo stesso server nello stesso Web in diverse applicazioni Web e diversi pool di applicazioni.asp.net 'Remember me' non funziona più con l'autenticazione dei moduli

Precedentemente ho avuto il problema, che non ho potuto accedere su entrambi i siti insieme. Grazie a Remy's post, ora funziona, ho dovuto aggiungere il name -attributo all'elemento forms.
Ma ora ho il problema che l'opzione remember-me del controllo di accesso asp ha smesso di funzionare. L'utente viene disconnesso dopo il normale timeout della sessione.

l'autenticazione-attributi nel file web.config sguardo come segue:

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

hanno anche ho impostato il nome del cookie per il forme authetication a nomi diversi.

C'è qualcos'altro che devo aggiungere, in modo che la funzione remember-me funzioni?

Aggiornamento
ho osservato che se disattivo la crittografia e la convalida per le forme di autenticazione-cookie, il problema è scomparso. Se attivo la crittografia, la convalida o entrambe, il problema si verifica di nuovo.
So anche che è indipendente dai nomi dei cookie di sessione (potrebbero anche essere identici). Forse questa informazione aiuta qualcuno a capire cosa sta succedendo?

Update 1
Grazie a Jason Kealey per la soluzione a questo problema. Non l'avrei mai trovato. Nel frattempo ho trovato le informazioni corrispondenti in msdn. In How To: Configure MachineKey in ASP.NET 2.0 nella sezione "Considerazioni Web Farm di distribuzione" è scritto:

Se si desidera isolare l'applicazione da altre applicazioni sullo stesso server, posizionare il <machineKey> nel file web.config per ogni applicazione su ogni server nella farm. Assicurarsi di utilizzare valori chiave separati per ciascuna applicazione, ma duplicare le chiavi di ciascuna applicazione su tutti i server della farm.

+0

che è di circa quello che ho. Hai eliminato i cookie esistenti? – Remy

+0

@Remy: No, non ha funzionato, ma comunque è stata una buona idea! – HCL

+0

cosa succede se cambi il timeout a qualcosa come 7 giorni (10080) invece di 277+ (400000) giorni? –

risposta

9

Il problema può essere che hai le chiavi di convalida che vengono generati automaticamente ogni volta che si avvia il processo di lavoro. Il cookie è crittografato, ma quando torni viene utilizzata una nuova chiave lato server e quindi il tuo cookie non può essere decodificato.

controllare la sezione machineKey http://msdn.microsoft.com/en-us/library/ff649308.aspx

Qui c'è qualcosa che genererà la sezione machineKey per voi http://www.qualitydata.com/products/aspnet-membership/help/configuration/no-machinekey.aspx

+0

Devo ammettere che non capisco cosa significhi la tua risposta (perché la mia conoscenza di asp.net è poco). Qual è il processo di lavoro e perché viene rilanciato. È questo il processo che IIS ospita il web? Se sì, perché questo problema si verifica solo quando ho due provider di appartenenza. Se ne ho uno solo, tutto funziona bene. Inoltre, se leggo i documenti collegati, tutti stanno dicendo che dovrei configurare la sezione della chiave della macchina se la mia app viene eseguita in una web-farm o se voglio condividere l'accesso tra le app. Ma non voglio nessuno di entrambi, in modo esplicito non condividendo il login tra le app. – HCL

+0

Dato che disabilitare la convalida rende tutto funziona, credo che ogni volta che il pool di applicazioni (processo di lavoro IIS) viene ripristinato, sta generando una nuova chiave che utilizza per convalidare il cookie dell'utente quando ritorna al tuo sito. Può resettare a causa di inattività o per una serie di motivi. (E la nuova chiave non può decrittografare il contenuto della visita precedente, in quanto non è la stessa di quella iniziale). Prova ad aggiungere qualcosa generato con lo strumento sopra e facci sapere se funziona. –

+0

Credo che questa sia la soluzione più probabile dati i fatti. – Greg

2

Prova impostare il nome di dominio per essere sicuri che il cookie di ricordare sia impostato correttamente in tutti i casi

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

+1 Nessuna fortuna anche con questo, ma la specificazione del dominio e soprattutto l'impostazione del percorso è stata una prova assidua. – HCL

+0

@HCL controlla anche le impostazioni dei cookie anonimi. – Aristos

0

Il timeout dei cookie è anche limitato da IIS e il valore predefinito è qualcosa di basso come 20 min. Per modificare:

  1. Aprire Gestione IIS.
  2. Fare clic destro e selezionare il vostro sito proprietà.
  3. Selezionare la scheda ASP.NET e fare clic su Modifica configurazione.
  4. Selezionare la scheda Autenticazione.
  5. Selezionare Attiva scadenza variabile.
  6. Impostare il timeout del cookie su un valore più lungo. Per impostare su 30 giorni, immettere 30,00: 00: 00.
  7. Fare clic su Gestione OK e uscire IIS.

enter image description here

Problemi correlati