Domanda

È possibile che ASP.NET confonda quale utente è associato a quale variabile di sessione sul server?Le variabili di sessione sono immutabilmente legate all'utente originale che le ha create nel tempo, nello spazio e nella dimensione?

È stato utile?

Soluzione

Per rispondere alla tua domanda iniziale:Le sessioni sono legate a un ID inserito in un cookie.Questo ID viene generato utilizzando alcune routine crittografiche con numeri casuali.Non è garantito che sia unico ma è altamente improbabile che venga mai duplicato nell'arco della vita di una sessione.Anche se le tue sessioni durano intere giornate lavorative.Probabilmente ci vorranno anni prima che un sito molto popolare possa generare una chiave duplicata (nessuna statistica o fatto a sostegno di ciò).

Detto questo, non sembra che il tuo problema sia che i valori della sessione si confondano.La prima cosa che inizierei a considerare è il pool di connessioni.ADO raggruppa le connessioni per impostazione predefinita, ma se richiedi una connessione con un nome utente/password che non è nel pool dovrebbe fornirti una nuova connessione.Suggerimento che potrebbe rappresentare un collo di bottiglia nelle prestazioni in futuro se il tuo sito è molto grande.È da un po' che non lavoro con SQL Server, in Oracle c'è una chiamata che può essere effettuata per cambiare l'identità dell'utente.Sarei sorpreso se non ci fosse un equivalente in SQL Server.Potresti provare a connetterti al tuo DB con un nome utente/password generico e quindi eseguire la chiamata di cambio di identità prima di restituire la connessione al resto del codice.

Altri suggerimenti

Dipende dal provider della sessione, se hai sovrascritto la generazione della chiave di sessione in un modo che non è più univoco, più utenti potrebbero accedere alla stessa sessione.

Che comportamento stai riscontrando?E sei sicuro che non ci siano staticità in gioco con le variabili di cui stai parlando?

mentre tutto è possibile....

No, a meno che non si stia memorizzando lo stato della sessione in SQL Server o in qualche altro archivio fuori processo e quindi non si stia scherzando...

La sessione è legata a un cookie dell'utente, le possibilità che ciò si verifichi in uno scenario normale sono molto improbabili, tuttavia potrebbero verificarsi problemi se si utilizza lo stato di sessione distribuito.

Non è possibile.Le sessioni sono legate al creatore.

Vuoi fare confusione o hai un caso in cui sembra confuso?

Maggiori informazioni:

Ho un'app che prende l'ID utente/password dalla pagina di accesso e la memorizza in una variabile di sessione.Lo inserisco nella mia stringa di connessione per effettuare chiamate a SQL Server.

Quando una tabella viene aggiornata, utilizziamo "system_user" nel database per identificare l'utente "ultimo aggiornamento da".Stiamo riscontrando alcuni comportamenti strani in cui l'utente che ci aspettiamo venga elencato non è corretto e viene mostrato qualcun altro.

Puoi aprire il debugger e vedere se il valore corretto viene effettivamente passato su quella stringa di connessione?Ti aiuterebbe rapidamente a identificare da che parte si trova il problema.

Assicurati inoltre che nessuno dei codici di connessione abbia proprietà statiche per la connessione o l'utente, altrimenti la connessione di un utente potrebbe essere sostituita con quella dell'utente più recente prima che l'aggiornamento venga attivato.

La mia ipotesi è che tu stia riutilizzando un campo statico su una classe per contenere la stringa di connessione.Questi campi statici vengono riutilizzati in più richieste IIS, quindi probabilmente vedrai solo l'utente che ha effettuato l'accesso più recentemente nella sezione "ultimo aggiornamento di".

A proposito, a meno che tu non abbia una VERAMENTE buona ragione per farlo, non dovresti connetterti al DB in questo modo.Ti stai impedendo di utilizzare il pool di connessioni che danneggerà le prestazioni in caso di carichi elevati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top