【发布时间】: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 关联的表中。 这样做的目的是什么?最佳做法是什么?
感谢您的宝贵时间。
【问题讨论】: