簡體   English   中英

ASP.NET MVC維護對象會話

[英]ASP.NET MVC maintain object Session

我有一個網站,用戶需要在其中執行一些簡單的步驟1-步驟4,因此我決定將所有數據保存到會話對象中,在步驟2-步驟4中,用戶可以返回上一步檢查表單(數據將被填寫與會話)

我的問題是。 我們可以在保持先前值的同時將新值/對象存儲到會話中嗎?

Session["regis"] = student.firstname

// i want object_a value still remain in Session["regis"]
Session["regis"] = student.lastname

還是我應該參加1次以上的課程??

Session["Step1"] = student.firstname

Session["Step2"] = student.lastname

是。 您可以像在第二個示例中一樣,將多個值存儲在會話中的不同鍵下(請注意,這是同一會話,只是一個不同的鍵)。 但是,這不會做您想要的事情:

Session["regis"] = student.firstname

// This will overwrite the first value
Session["regis"] = student.lastname

您可能還考慮將整個視圖模型存儲在一個鍵下。

不過,在會話中存儲內容時要小心。 引起不良行為非常容易。 例如-應用程序池可能過期,丟失會話數據; 如果您在負載平衡的環境中運行,則當用戶訪問其他應用程序服務器時,他們的會話可能會丟失; 如果用戶正在運行多個選項卡,則在一個選項卡的請求中分配的會話變量可能會干擾另一個選項卡中應用程序的行為,等等。

考慮改用Cookie或隱藏字段。 如果必須使用會話變量,則最好至少生成動態鍵並在查詢字符串中逐頁傳遞這些鍵,以確保例如使用多個選項卡不會引起鍵沖突。

當新值使用相同的鍵(例如regis )分配給會話對象時,您將丟失先前的值,因此您需要使用第二個選項。

您可以使用階段來創建/訪問會話對象,例如

在會話中設置值

Session["Step" + stepIndex] = student.firstname;

從會議中獲取價值

string str = Session["Step" + stepIndex].ToString();

另一種選擇是將對象存儲在會話中。 (假設學生是學生班的實例)

private Student StudentSession
{
    get{ return (Student)Session["regis"]; }
    set{ Session["regis"] = value; }
}

用法,

StudentSession = new Student();

StudentSession.Name = "Scott";
StudentSession.Surname = "Foo";

您可以稍后在另一頁上分配附加變量。

StudentSession.Age = 12;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM