2010-03-31 64 views
1

我有一些关于会话管理的问题。需要自定义会话管理器帮助 - 如何访问会话信息?

我决定使用自定义会话管理器类来在我的网站上对会话状态进行更多的控制 。我已经开始使用Stephan Prodan的 Session Class 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); 

OK,我明白了上面的代码。我不完全明白的是,当用户与系统交互时,我可以如何访问会话信息。例如, 采取下面的代码:

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

} 

在上面的代码我需要用户的用户名传递给 到`GetUserProfile方法,以便创建已认证用户的简档的一个实例 。但是,我需要 让配置文件对象访问SessionId。排序为 a Catch 22.我在这里做错了什么?我应该如何访问用户 访问的每个新页面的 会话和配置文件信息?

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

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

谢谢你的时间。

回答

0

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

默认情况下,对话信息是由会话状态模块处理: 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”变量中。

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