2012-08-16 99 views
0

進入一個愚蠢的問題...帶變量的ASP.NET會話管理

所以現在我實現Application_Start來加載哈希表,它工作正常。接下來在Session_Start中,我解析用戶的cookie來檢索他的名字,這同樣可以正常工作。當我將他的用戶名存儲在Global.asax.cs中的變量中時,會發生問題。我沒有真正意識到這是所有進程/線程共享的變量。所以我想我的問題是,你如何解析用戶的cookie一次,然後在進程/線程中的其他地方保存數據。

+0

很多答案被推薦使用Session檢索。根據你的描述,這將是正確的解決方案。但是你沒有說**你爲什麼需要存儲cookie。爲什麼? – user1429080 2012-08-16 17:45:44

+0

我需要有用於登錄的用戶名並以登錄用戶的身份輸出到屏幕。 – keelerjr12 2012-08-16 19:47:30

+0

好的,與從cookie中獲取它相比,從'Session'中獲取它可能稍微容易一些。我認爲你最好遵循Darin Dimitrov的建議,並檢查Forms Authentication。使用它,當前用戶的用戶名(當然是登錄後)很容易訪問:'string userName1 = Page.User.Identity.Name;'或'string userName2 = HttpContext.Current.User.Identity.Name; '。表單驗證模塊負責爲您處理cookie。 – user1429080 2012-08-16 20:00:07

回答

1

您可以在會話中存儲cookie並稍後使用它。您可以將任何對象存儲在會話集合中,並在其過期之前進行檢索。你可以閱讀更多在here

分配到會話

Session["anyName"] = "value"; 

從會話對象

string str = Session["anyName"].ToString(); 
+0

會話[「用戶名」]!=會話[「用戶名」],當他們在不同的會話/進程?例如,如果userA登錄,我需要存儲userA和他的IP地址,現在userB登錄並存儲他的用戶名和IP地址。我只是將Session [「username」]和Session [「ipaddress」]都設置爲? – keelerjr12 2012-08-16 19:51:30

+0

您將擁有每個用戶的Session [「username」]的唯一副本。假設一個用戶通過Session [「username」] =「John」來存儲John,而另一個用戶存儲Session [「username」] =「Peter」,那麼您將爲每個用戶分配兩個不同的會話副本。這可能會幫助你http://msdn.microsoft.com/en-us/library/ms972429.aspx – Adil 2012-08-16 22:48:55

0

這正是ASP.NET會話的意義所在。在那裏存儲這些信息。它將只針對當前用戶,並不在所有用戶之間共享。

順便說一下,您可能還想結帳Forms Authentication in ASP.NET,只是爲了確保您不會重新發明某些車輪。

0

難道你不能使用Session嗎?

Session["username"] = username; 


var username = Session["username"]; 
0

會議肯定是我會走的路。 Session中有大量數據可能會導致性能問題,但僅爲每個用戶存儲小字符串根本無關緊要。

+0

只是好奇,如果你有每個會話有大量的數據,你會怎麼處理這個問題? – keelerjr12 2012-08-16 19:48:17

+0

我從來沒有親自做過,但有一個壓縮會話數據的選項。此外,您可以設置一個asp.net應用程序來將會話數據存儲在主進程之外,甚至在一個單獨的框中。理想情況下,會話應儘可能用於更小的數據塊。 – mElling 2012-08-17 12:01:59