如果将一个对象从会话(HttpContext.Current.Session)返回到对象类型的私有成员,然后修改它,例如您重命名属性或向对象内部列表成员添加内容。如果在另一个页面上您从会话中请求相同的对象,那么这些更改是否会保留...是否会使用上一页上更新的值进行更新。换句话说,对象是持久化的,或者在每个页面上更改任何内容后,您是否必须将对象重新保存回会话。任何帮助深表感谢。感谢
答案 0 :(得分:2)
如果修改存储在会话状态的实例,则会修改实例 如果修改实例的副本,原始文件将不受影响。 (除非副本引用原件并更新它,这是不可能的)
答案 1 :(得分:2)
如果是实际对象,那么是,您正在修改会话维护的版本,它的值将被保存。
如果它不是引用类型,如String,那么你必须引用实际的会话值来修改它(即:session [“key”] = value)。
但是,我会提醒您不要在会话中存储真实对象。会话通过序列化和反序列化每个页面加载的值来工作。您投入会话的次数越多,框架在开始执行您的页面之前必须执行的工作量越多。
由于它的工作原理,您实际上只应将值放在整个站点中真正需要的会话中。
在考虑将某些内容放入会议之前,我会问自己以下几点:
如果1为是,则使用会话是“可能”
如果2是肯定的,那么会话也可能是,但我可能会使用不同的缓存机制
如果3是肯定的话我根本不使用会话(并完全关闭它)。负载平衡需要会话状态服务器,通常是sql server。这导致我们回到会话的初始问题:即,为每个单页请求加载和保存值。
答案 2 :(得分:1)
虽然你可以很容易地为自己测试这个,但答案是肯定的 - 对象将被保留!
存储在会话字典中的对象是通过引用存储的,这意味着如果更改对象的内部属性或结构(即,如果存储List<>对象并添加或删除项目),则这些更改将是保留。
话虽这么说,如果你存储一个值类型,如Int32或布尔值,那么如果你改变了值,你需要专门将它设置为Session。