需要有关自定义会话管理器的帮助 - 如何访问会话信息?

时间:2010-03-31 19:35:45

标签: c# asp.net session

我对会话管理有一些疑问。

我决定使用自定义会话管理器类来获得更多控制权 在我的网站上超过会话状态。我已经开始使用Stephan Prodan了 会话类here。你需要看看才能了解我的情况 我在说什么。

1)我的第一个问题涉及我如何持久存取会话信息 在用户验证(或不验证)之后。在他的示例中,创建了会话 在登录/认证时:

    // Create new instance of session manager
    SessionManager<WorkbookProfile> sessionManager = 
        new SessionManager<WorkbookProfile>(10);

    //Register timeout event
    sessionManager.OnEntryTimeout += 
        new SessionEntryTimeoutDelegate<WorkbookProfile>(sessionManager_OnEntryTimeout);

    // Get the user's profile
    UserProfile profile = UserProfile.GetUserProfile(_membership.GetUserNameByEmail(Login1.UserName));

    //Log profile & start session
    sessionManager.startSession(ref profile);

    //Store on the session a user's object
    sessionManager.SetData("MyData", "UserObject", user.SessionId);

好的,我理解上面的代码。我完全不懂的是我怎么做 用户与系统交互时访问会话信息。例如, 采取以下代码:

public partial class MyClass : System.Web.UI.Page
{
    private UserProfile _profile;
    private SessionManager<UserProfile> _session;

    protected void Page_PreInit(object sender, EventArgs e)
    {
        _session = new SessionManager<UserProfile>(10);
    }

    protected void Page_Load(object sender, EventArgs e)
    {

        string UserName = sessionManager[profile.SessionId].UserName;

        _profile = UserProfile.GetUserProfile(UserName);
    }

}

在上面的代码中,我需要将用户的UserName传递给 到`GetUserProfile方法,以创建一个实例 经过身份验证的用户的个人资料。但是我需要 让profile对象访问SessionId。有点 抓住我在这里做错了什么?我应该如何访问 用户的每个新页面的会话和配置文件信息 访问?

2)使用会话时数据库的重要性?

我的第二个问题涉及DB与会话的使用。 在Stefan的课程中,所有会话信息都存储在会话中 只要用户通过身份验证就会持久存在的对象。但, 在其他在线阅读中,我看过程序员的例子 将会话密钥存储在与fk_profileid相关联的表中。 这样做的目的是什么?什么是最佳做法?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

Microsoft为我们提供了执行此类操作的提供程序模型。 通过使用提供者模型,我们可以使用简单的配置语句替换我们需要的任何功能。

默认会话信息由会话状态模块处理: http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.aspx

这是我开始创建自己的地方: http://msdn.microsoft.com/en-us/library/ms178587.aspx

Essentialy你应该有一个继承了这个的类: http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatestoreproviderbase.aspx

这是一个例子(非常基本我会承认): http://msdn.microsoft.com/en-us/library/ms178588.aspx

如果您遵循最佳实践(在上面的链接中介绍),您应该能够实现一个自定义会话状态提供程序,该提供程序在大约2到4个小时内替换现有的会话状态提供程序(有一点时间来计算它并且修修补补)。

这意味着您需要的所有内容都应该在默认页面“Session”变量中。

但是,使用提供者模型意味着您不必替换现有提供者,您也可以在默认提供者旁边运行自定义提供者