关于c#web应用程序中会话的问题

关于c#web应用程序中会话的问题,c#,C#,用户登录用户=新用户(); 会话[“用户”]=登录用户 将对象(登录用户)传递给会话意味着什么?会话是否会从对象(LoginUser)获得任何时间值?您正在将对象添加到会话变量中,该变量将在该会话期间在整个应用程序中可访问 然后(例如,在其他页面中)可以如下方式访问它: User loginUser = (User)Session["User"]; 在使用loginUser时需要小心,因为会话超时,或者如果您之前没有将对象添加到会话中,则该对象可能为null您正在将对象添加到会话变量中,然后在

用户登录用户=新用户(); 会话[“用户”]=登录用户


将对象(登录用户)传递给会话意味着什么?会话是否会从对象(LoginUser)获得任何时间值?

您正在将对象添加到会话变量中,该变量将在该会话期间在整个应用程序中可访问

然后(例如,在其他页面中)可以如下方式访问它:

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

在使用
loginUser
时需要小心,因为会话超时,或者如果您之前没有将对象添加到会话中,则该对象可能为
null

您正在将对象添加到会话变量中,然后在该会话期间整个应用程序都可以访问该变量

然后(例如,在其他页面中)可以如下方式访问它:

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

当使用
loginUser
时需要小心,就像会话超时一样,或者如果您之前没有将对象添加到会话中,则该对象可能为
null

您应该注意,当您将用户对象放入应用程序的会话中时,它是序列化的

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 framework会将其存储在某个位置(可能在服务器内存中、文件中或数据库中,具体取决于会话存储机制)。要持久化对象,将对其进行序列化(转换为字节序列)。中描述了序列化过程。序列化过程是可参数化的,主题也相当大。太大了,这篇文章实际上无法涵盖

要创建一个可序列化的类,只需将serializable属性添加到该类中,并确保所有类字段或属性也是可序列化的

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

您应该注意,当您将用户对象放入应用程序的会话中时,它是序列化的

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 framework会将其存储在某个位置(可能在服务器内存中、文件中或数据库中,具体取决于会话存储机制)。要持久化对象,将对其进行序列化(转换为字节序列)。中描述了序列化过程。序列化过程是可参数化的,主题也相当大。太大了,这篇文章实际上无法涵盖

要创建一个可序列化的类,只需将serializable属性添加到该类中,并确保所有类字段或属性也是可序列化的

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

请解释你所说的“获得任何时间价值”是什么意思?这没有意义。嗨,我想对象可能会给会话超时时间。请解释一下“获取任何时间值”的含义?这没有意义。嗨,我想这个对象可能会给会话超时时间。你的答案很好,我有疑问。你能澄清一下吗。1.你能告诉我“可序列化和反序列化”是什么意思吗。。。2.以及如何/何时才能获得user2…A添加了一些关于序列化的精确性。要从会话中获取user2,您应该将会话中的初始用户替换为新用户(会话[“用户”]=loginUSer)。您的答案很好,我有疑问,您是否可以清除它。1.你能告诉我“可序列化和反序列化”是什么意思吗。。。2.以及如何/何时才能获得user2…A添加了一些关于序列化的精确性。要从会话中获取user2,您应该用新用户(session[“User”]=logiuser)替换会话中的初始用户,正如Maupertuis所说。。这种方式在另一页/任何一页上获取值有什么用。。我们也可以通过Querystring方法获得值,是吗?@saj-一个非常复杂的对象不容易在查询字符串上表示(假设您有20个属性)。使用session对象意味着您不需要在查询字符串中公开这些信息(任何人都可以简单地对其进行更改)。。这种方式在另一页/任何一页上获取值有什么用。。我们也可以通过Querystring方法获得值,是吗?@saj-一个非常复杂的对象不容易在查询字符串上表示(假设您有20个属性)。使用session对象意味着您不需要在查询字符串中公开这些信息(任何人都可以简单地对其进行更改)。