2008-09-18 119 views
1

ASP.NET可能會混淆哪個用戶與服務器上的哪個會話變量關聯?會話變量是否與創建它們的原始用戶永久綁定,空間爲&維度?在ASP.NET中的會話變量混合?

+0

我有一個會議,他們是,事實上,混淆起來。 http://stackoverflow.com/questions/1646274/asp-net-session-mix-up-using-stateserver-scary – 2009-10-29 21:14:24

回答

2

要回答你的原始問題:會話被鍵入一個放在cookie中的ID。該ID是使用一些隨機數加密例程生成的。並不保證它是獨一無二的,但它很可能在會話的整個生命週期內都會被重複。即使您的會話運行了整個工作日。一個真正受歡迎的網站甚至可能需要幾年時間才能生成重複的密鑰(沒有統計數據或事實來支持)。

話雖如此,它似乎並沒有出現問題與會話值混在一起。我會開始考慮的第一件事是連接池。ADO默認池連接,但如果您請求與不在池中的用戶名/密碼進行連接,它應該爲您提供新的連接。如果您的網站非常龐大,提示未來可能會成爲性能瓶頸。自從我使用SQL Server以來,已經有一段時間了,在Oracle中有一個可以切換用戶身份的調用。如果在SQL Server中沒有等價物,我會感到驚訝。您可以嘗試使用通用用戶名/密碼連接到數據庫,然後在將連接交回其餘代碼之前執行該標識開關調用。

0

儘管有可能。 。 。 。

不,除非你在sql server或其他一些進程外存儲中存儲會話狀態,然後搞亂它。 。 。

2

這取決於您的會話提供程序,如果您已經以不再唯一的方式覆蓋會話密鑰生成,那麼多個用戶可能正在訪問同一個會話。

你看到了什麼行爲?你確定在你所談論的變量中沒有靜態的東西嗎?

+0

正確的,靜態變量可能會真的錯了。 – Biri 2008-09-18 12:36:25

0

會話綁定到用戶cookie,在正常情況下出現混亂的機率不太可能,但是如果使用分佈式會話狀態可能會出現問題。

0

這是不可能的。會話與創建者相關聯。

你想混淆嗎,還是你有混淆的情況?

0

的更多信息:

我有一個應用程序,需要從登錄頁面,並將其存儲的用戶名/密碼在會話變量。我把它放到我的連接字符串中以調用SQL Server。

當表得到更新時,我們使用數據庫中的'system_user'來標識'last updated by'用戶。我們看到一些奇怪的行爲,其中我們期望列出的用戶不正確,並且顯示其他人。

0

你可以彈出調試器,看看是否正確的值傳遞連接字符串?它會很快幫助你確定問題出在哪個方面。

還要確保沒有任何連接代碼具有連接或用戶的靜態屬性,或者一個用戶在更新關閉之前可能會將其連接替換爲最新用戶的連接。

0

我的猜測是,你正在重新使用類的靜態字段來保存連接字符串。這些靜態字段會在多個IIS請求中重複使用,因此您可能只會看到「上次更新日期」中最近登錄的用戶。

順便說一句,除非你有一個真正的好理由這樣做,那麼你不應該像這樣連接到數據庫。您正在阻止自己使用連接池,這會在高負載下損害性能。