0

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

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

如何在我的课程中做到这一点?我上面描述的内容来自我所做的研究,它为我的问题提供了一个特定的解决方案,但是由于我是使用 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;
        }
    }
4

2 回答 2

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

于 2013-01-10T20:32:11.543 回答
1

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

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

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

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

于 2013-01-10T20:25:26.977 回答