2010-10-06 73 views
0

User LoginUser = new User(); Session [「User」] = LoginUser;關於在c#web應用程序中的會話的問題

將對象(LoginUser)傳遞給Session是什麼意思?會話會從對象(LoginUser)獲取任何時間值嗎?

+0

請解釋「獲取任何時間值」是什麼意思?這個不成立。 – Oded 2010-10-06 09:51:53

+0

您好我認爲該對象可能會給會議超時期.. – selvaraj 2010-10-06 11:01:42

回答

1

您應該注意,User對象在您將其放入應用程序的會話中時會被序列化。

User LoginUser = new User(); 

它有一些後果: 1)用戶類必須是可序列化。 2)當你稍後訪問對象時(見Oded答案),它將從會話中反序列化:你不會保留相同的引用。

User loginUser = new User(); 
loginUser.Name="user1";  

Session["User"] = LoginUser; 

loginUser.Name = "user2"; 

var loginUser2 = (User)Session["User"]; 

=> loginUser2.Nam contains "user1"; 

它爲什麼這樣工作?當你在會話中放置一個對象時,.NET框架將把它存儲在某個地方(可能在服務器內存中,在文件中或在數據庫中,這取決於會話存儲機制)。要堅持你的對象,它將被序列化爲(轉換成字節序列)。序列化過程在MSDN中描述。序列化過程相當具有參數化,且主題相當大。實際上這個帖子太大了。

要創建一個可序列化的類,只需將Serializable屬性添加到類中,並確保所有類字段或屬性都是可序列化的。

[Serializable] 
public class MyClass 
{ 
    public string Field{get,set} 
} 
+0

你的回答很好,我有疑問你能清除它。 1.你能告訴我你的意思是「可序列化和反序列化」嗎?2.以及如何/何時可以得到用戶2 ... – selvaraj 2010-10-06 10:51:14

+0

A增加了一些關於序列化的精度。要從會話中獲取user2,應該由新用戶(Session [「User」] = loginUSer)替換會話中的初始User, – Eilistraee 2010-10-06 13:08:02

2

您正在將該對象添加到會話變量中,該會話變量將在該會話期間在整個應用程序中可用。

然後,您可以(在其他頁面,例如)訪問這樣的:

User loginUser = (User)Session["User"]; 

您需要使用loginUser時要小心,因爲如果會話超時,或者如果你沒有添加的對象前面的會議,它可能是null

+0

嗨Oded作爲Maupertuis說..這種方式使用什麼方式來獲得價值在另一個頁面/任何網頁..我們可以通過Querystring方法獲得值也是嗎? – selvaraj 2010-10-06 11:05:50

+0

@saj - 一個非常複雜的對象不容易在查詢字符串上表示(假設您有20個屬性)。使用會話對象意味着你不需要在查詢字符串中公開這些信息(任何人都可以簡單地改變它)。 – Oded 2010-10-06 11:09:11