2011-08-19 8 views
5

Ho la linea:Perché il timeout della sessione non funziona quando impostato su SqlServer?

<sessionState mode="SQLServer" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" /> 

che memorizza la sessione in un server di stato SQL. Tuttavia non si spegne correttamente dopo un minuto.

Quando cambio la linea per utilizzare la modalità InProc:

<sessionState mode="InProc" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" /> 

Fa timeout dopo un minuto.

Qualche idea del perché questo sta accadendo? Come posso far scadere il timeout quando usi SqlServer?

risposta

6

Se si utilizza SQL Server Express, è perché non esiste alcun Agente SQL Server per eseguire la procedura DeleteExpiredSessions.

Ecco una possibile soluzione al problema:

Nel stored procedure che aggiorna la seduta, ho aggiunto SQL dalla procedura DeleteExpiredSessions alla sessione di aggiornamento memorizzato procedure (non riesco a ricordare il nome) in modo che controlli le sessioni precedenti, elimina la sessione precedente e quindi aggiorna le sessioni correnti. La procedura memorizzata che aggiorna la sessione viene eseguita comunque ad ogni clic, , quindi ho aggiunto altre due righe che rimuovono le vecchie sessioni prima che la sessione venga aggiornata. Questo sembra funzionare bene.

1

Si può essere in grado di controllare il timeout della sessione impostando il timeout del cookie di autenticazione moduli:

FormsAuthenticationTicket authTicket = 
new FormsAuthenticationTicket(1, // version 
txtUserName.Text, 
DateTime.Now, 
DateTime.Now.AddMinutes(1), 
false,@"\"); 

In questo modo l'utente perde il contatto con la sessione dopo 1 min.

+0

Il timeout di autenticazione dei moduli e il timeout della sessione sono due cose separate. – KingOfHypocrites

6
  1. Assicurarsi che il servizio SQL Server Agent è in esecuzione

  2. pulsante destro del mouse sul processo di SQL Server Agent nome ASPState_Job_DeleteExpiredSessions e fare clic su "Visualizza cronologia" - Assicurarsi che questo processo è in esecuzione con successo ogni 1 minuto.

Nel mio caso, in qualche modo (probabilmente durante una delle molteplici installazioni che coinvolgono istanze denominate) il mio Agente SQL Server ha avuto il suo insieme di proprietà Connection -> Alias Localhost Server ad appena il nome del server e non il nomeserver \ nomeistanza.

Quando si verificava questo cambiamento, il ASPState_Job_DeleteExpiredSessions sembrava funzionare a tempo indeterminato e non poteva essere fermato. Quindi, ho tentato di riavviare il servizio Agente SQL Server, ma non si avviava il backup. Tuttavia, dopo aver modificato la proprietà Connection -> Alias Localhost Server in nomeserver \ instancename, SQL Server Agent ha avviato correttamente il backup e il lavoro ASPState_Job_DeleteExpiredSessions è stato avviato correttamente una volta al minuto come dovrebbe ..... e questo ha ovviamente risolto il problema di timeout.

+0

Grazie, questo ha funzionato per me –

Problemi correlati