2012-08-13 36 views
0

基本上我有一個對象在多個頁面中被持久化,所以我使用Session來保存和檢索對象。我正在使用會話密鑰的GUID。我使用靜態構造函數來創建GUID。使用GUID作爲會話密鑰?

這裏是對象的示例:

class Customer 
{ 
    private static readonly string _sessionKey; 

    public static string SessionKey 
    { 
     get { return _sessionKey; } 
    } 

    static Customer() 
    { 
     _sessionKey = Guid.NewGuid().ToString(); 
    } 
} 

然後我用它在我的代碼是這樣的:

Session.Add(Customer.SessionKey, new Customer()); 

...

Customer C = Session[Customer.SessionKey] as Customer; 

我個人比較喜歡這個方法而不是用於會話密鑰的文字const stringstring。只是想知道是否有任何缺點,或者你有什麼其他方法?

+1

看起來如果密鑰不是靜態的,即在會話中存在多個「客戶」,這樣做會更有意義。另外,這個問題可能更適合http://codereview.statckexchange.com。 – FishBasketGordo 2012-08-13 20:52:42

+1

如果您移動到負載平衡環境,則將新GUID用作關鍵字確實會下降 – 2012-08-13 20:56:28

+0

如果要將會話密鑰存儲爲靜態變量,爲什麼不將「客戶」對象存儲爲靜態變量? – Servy 2012-08-13 20:57:14

回答

4

爲什麼這樣做?你應該定義常量並完成它。如果您迭代或使用調試器Session,則它們的描述性不夠。

0

如果您在Customer會話中有對象 - 保存在常量名稱下。否則考慮以恆定名稱保存Customer對象的集合。注意:如果您打算使用其他狀態提供程序(SQL /狀態服務)而不是默認的內存,請確保您的Customer對象是serializale,並且在請求之間有意義。