User LoginUser = new User(); Session [“User”] = LoginUser;关于在c#web应用程序中的会话的问题
将对象(LoginUser)传递给Session是什么意思?会话会从对象(LoginUser)获取任何时间值吗?
User LoginUser = new User(); Session [“User”] = LoginUser;关于在c#web应用程序中的会话的问题
将对象(LoginUser)传递给Session是什么意思?会话会从对象(LoginUser)获取任何时间值吗?
您应该注意,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}
}
你的回答很好,我有疑问你能清除它。 1.你能告诉我你的意思是“可序列化和反序列化”吗?2.以及如何/何时可以得到用户2 ... – selvaraj 2010-10-06 10:51:14
A增加了一些关于序列化的精度。要从会话中获取user2,应该由新用户(Session [“User”] = loginUSer)替换会话中的初始User, – Eilistraee 2010-10-06 13:08:02
您正在将该对象添加到会话变量中,该会话变量将在该会话期间在整个应用程序中可用。
然后,您可以(在其他页面,例如)访问这样的:
User loginUser = (User)Session["User"];
您需要使用loginUser
时要小心,因为如果会话超时,或者如果你没有添加的对象前面的会议,它可能是null
。
请解释“获取任何时间值”是什么意思?这个不成立。 – Oded 2010-10-06 09:51:53
您好我认为该对象可能会给会议超时期.. – selvaraj 2010-10-06 11:01:42