2015-09-22 50 views
0

如果沒有,是否有辦法讓它安全?即使它用會話中的內容填充類成員不是公共類的靜態類?這意味着當多個用戶同時訪問應用程序時,該類/成員可能會來回彈出......對嗎?我錯過了什麼?以下代碼在多用戶Web應用程序中安全嗎?

@M4N在這裏拍攝:https://stackoverflow.com/a/621620/158050


public class MySession 
{ 
    // private constructor 
    private MySession() 
    { 
     Property1 = "default value"; 
    } 

    // Gets the current session. 
    public static MySession Current 
    { 
     get 
     { 
     MySession session = 
      (MySession)HttpContext.Current.Session["__MySession__"]; 
     if (session == null) 
     { 
      session = new MySession(); 
      HttpContext.Current.Session["__MySession__"] = session; 
     } 
     return session; 
     } 
    } 

    // **** add your session properties here, e.g like this: 
    public string Property1 { get; set; } 
    public DateTime MyDate { get; set; } 
    public int LoginId { get; set; } 
} 

在ASP.NET會話的本身這個類存儲一個實例,並允許您從任何類訪問類型安全方式的會話屬性,例如像這樣:

int loginId = MySession.Current.LoginId; 

string property1 = MySession.Current.Property1; 
MySession.Current.Property1 = newValue; 

DateTime myDate = MySession.Current.MyDate; 
MySession.Current.MyDate = DateTime.Now; 
+0

http://codereview.stackexchange.com/ – simonalexander2005

+2

'不是公共類靜態' - 沒有。獲取者Current是靜態的,但類絕對不是。每個會話您將擁有一個「MySession」實例(或根本沒有)「 – Rob

回答

2

即使MySession.Current是靜態的,它不能直接存儲數據。相反,它使用的是HttpContext.Current.Session,它對每個用戶的會話都是特定的,因此它與通常的對象HttpContext.Current.Session一樣安全。

+0

」能夠在我的環境中進行測試。謝謝。 – Kristopher

相關問題