• Session如何存储对象?


    经常使用 Session 直接储存一些字符串和值类型,但很少储存对象,在取 Session 值时将指定 Session 进行强制类型转换以获取储存在 Session 中的值,于是想当然的认为 Session 储存对象类似于 ViewState,是将对象串行化以后放入到 Session 中的。 日前在做一个流程处理的时候,将流程处理的过程封装成了一个独立的类,与页面分离开来,因为要跨页面保存该对象的状态信息,所以将对象存储到 Session 中,却发现 Session 储存对象时似乎不是串行化以后再保存,而是直接储存对象的一个引用,为证实这个结论,做了一个小测试:

    1. //自定义对象
    2. public class SessionTest
    3. {
    4.     public int a = 1;
    5.     
    6.     public SessionTest()
    7.     {
    8.         //
    9.         // TODO: Add constructor logic here
    10.         //      
    11.     }
    12. }

    页面代码:

    1. public partial class SessionTestPage : System.Web.UI.Page
    2. {
    3.     protected void Page_Load(object sender, EventArgs e)
    4.     {
    5.         if (!IsPostBack)
    6.         {
    7.             SessionTest st = new SessionTest();
    8.             lt1.Text = st.a.ToString();
    9.             Session["Ss"] = st;
    10.             //储存到 Session 后更改对象值
    11.             st.a = 2;
    12.         }
    13.     }
    14.     protected void btnSubmit_Click(object sender, EventArgs e)
    15.     {
    16.         SessionTest st2 = Session["Ss"as SessionTest;
    17.         //从 Session 中取出对象并显示
    18.         lt2.Text = st2.a.ToString();
    19.     }
    20. }

    在页面上显示 lt2.Text  的值为 2,这个值是在对象储存到 Session 后才改变的,这表明 Session 储存的是对象的引用。这帮了我一个很大的忙,只要在创建对象后将对象储存到 Session,然后对象的更改会在 Session 中实时反应出来,而不用担心 Session 和 对象的同步。

    注意:仅测试了状态管理为 Inproc 时的情形。

  • 相关阅读:
    学习《Beginning iPhone 4 Development 》第6章关于View Switcher这个例子的问题
    Task、Thread、Process、Program
    Xcode Build版本号自增
    NSAutoreleasePool
    xml文件操作
    一些收集整理的JS
    网页常用小技巧
    40种网站设计常用技巧
    在虚拟主机中用ASP.NET1.1服务器端TIMER定时读取RSS信息到数据库
    删除服务器的文件夹后,session就丢失的问题
  • 原文地址:https://www.cnblogs.com/Kung/p/Session.html
Copyright © 2020-2023  润新知