2010-10-06 79 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