【问题标题】:Creating and storing a session创建和存储会话
【发布时间】:2013-01-10 20:21:00
【问题描述】:

我正在为我的网站上的用户登录创建会话。我可以初始化会话并很好地使用它的成员,但我还需要在我的会话类中使用一个方法来存储自己。我需要提供HttpSessionState 作为输入参数,然后将其存储到一个对象中,例如:Session["sessionName"]=this;

此外,当我想检索会话时,它还没有被创建,所以它必须是静态的。然后我需要从HttpSessionState 中返回填充属性(用户名和公司ID)的会话类的新实例。

如何在我的课程中做到这一点?我上面描述的内容来自我所做的研究,它为我的问题提供了一个特定的解决方案,但是由于我是使用 session 的新手,所以我不太了解它。 谢谢。

我的会话类的片段:

public class MySession : System.Web.UI.Page
    {
        private MySession()
        {
            Username    = Business.User.labelUsername;
            CompanyId   = Business.User.labelCompanyId;
        }

        public static MySession Current
        {
            get
            {
                try
                {
                    MySession session = (MySession)HttpContext.Current.Session["sessionName"];

                    if (session == null)
                    {
                        session = new MySession();
                        HttpContext.Current.Session["sessionName"]=session;
                    }
                    return session;
                }
                catch (NullReferenceException e)
                {
                    Debug.WriteLine("NullReferenceException:");
                    Debug.WriteLine(e);
                }
                return null;
            }
        }

        public string Username
        {
            get; set;
        }

        public string CompanyId
        {
            get; set;
        }
    }

【问题讨论】:

  • 我不明白你遇到的问题,你能详细说明你想要完成什么吗?
  • 似乎很明显OP想要什么。他需要将自己的对象存储在会话中并按需将其带回。

标签: c# asp.net session


【解决方案1】:

您可以尝试使用序列化的“会话信息”对象:

[Serializable]
public class SessionInfo
{
    // Stuff to store in session
    public string Name { get; set; }
    public int Foo { get; set; }

    private SessionInfo()
    {
        // Constructor, set any defaults here
        Name = ""
        Foo = 10;
    }

    public static SessionInfo Current
    {
        get
        {
            // Try get session info from session
            var info = HttpContext.Current.Session["SessionInfo"] as SessionInfo;

            // Not found in session, so create and store new session info
            if (info == null)
            {
                info = new SessionInfo();
                HttpContext.Current.Session["SessionInfo"] = info;
            }

            return info;
        }
    }
}

然后您可以像这样在您的应用程序中使用它:

SessionInfo.Current.Name = "Something Here";
SessionInfo.Current.Foo = 100;

序列化/反序列化都在 SessionInfo 对象中完成,您可以享受类型安全数据的好处。

【讨论】:

    【解决方案2】:

    您所问的是所谓的序列化和反序列化。

    序列化是获取一个对象并将其转换为可以存储的格式,例如字符串。反序列化与该操作相反。

    “快速”的方法是将[Serializable] 属性添加到您的类。但是,如果不知道该类的详细信息,很难说它是否真的很容易序列化而不需要一点工作。

    这是一个演练:http://msdn.microsoft.com/en-us/library/vstudio/et91as27.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多