创建和存储会话

时间:2013-01-10 20:21:00

标签: c# asp.net session

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

此外,当我想要检索会话时,它尚未创建,因此它必须是静态的。然后我需要返回一个我的会话类的新实例,其中包含HttpSessionState中填充的属性(username和companyID)。

如何在我的会话课程中完成此操作?我上面所描述的是我所做的研究为我的问题提供了一个特定的解决方案,但由于我是新手使用会话,我不太明白。 感谢。

我的会话课的片段:

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;
        }
    }

2 个答案:

答案 0 :(得分:3)

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

[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对象中完成的,您可以获得类型安全数据的好处。

答案 1 :(得分:1)

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

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

“快速”方式是将[Serializable]属性添加到您的班级。但是,如果不知道该类的详细信息,很难说它是否实际上很容易序列化而没有一点工作。

以下是演练:http://msdn.microsoft.com/en-us/library/vstudio/et91as27.aspx