2010-03-31 62 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」變量中。

但是,使用提供者模型意味着您不必替換現有的提供者,也可以在默認的提供者旁邊運行自定義提供者