【问题标题】:Need Help With Custom Session Manager - How Do I Access Session Information?需要自定义会话管理器的帮助 - 如何访问会话信息?
【发布时间】:2010-03-31 19:35:44
【问题描述】:

我有一些关于会话管理的问题。

我决定使用自定义会话管理器类来获得更多控制权 在我的网站上的会话状态。我开始使用 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);
    }

}

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

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

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

感谢您的宝贵时间。

【问题讨论】:

    标签: c# asp.net session


    【解决方案1】:

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

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

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

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

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

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

    这意味着你需要的一切都应该在默认页面的“Session”变量中。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多