簡體   English   中英

我應該在哪里創建用戶會話?

[英]where should I create user sessions?

我正在使用VS2010,C#開發一個自動化站點(ASP.NET Web應用程序),該站點可能一次擁有多達數百個用戶。 我幾乎完成了網站的創建,但是我知道我犯了一些錯誤,其中之一是在頁面后面的代碼隱藏中使用公共靜態變量,而不是為每個用戶使用會話,現在,當用戶A更改頁面B中的設置時,用戶B也以與用戶A查看頁面完全相同的方式查看頁面,而不是以默認狀態查看頁面。 我有一個問題:我應該在哪里為每個用戶聲明會話? 當用戶登錄時,我為每個會話創建一個會話,這是我到目前為止使用的唯一會話:

Session.Add("userid" + myReader["ID"].ToString(), "true");

我應該在這里創建其他必要的會話嗎? 即在登錄時? 例如,我在負責查看數據庫的頁面上聲明了一些公共靜態變量:

        public static string provinceid = "0";//0 means all
    public static string branchid = "0";
    public static string levelid = "0";
    public static string groupid = "0";
    public static string phrase = "";

我應該在登錄時為每個會話聲明一個會話嗎? 還是可以在每個頁面啟動時聲明它們?

謝謝

Session對象已經對每個用戶都是唯一的-您無需“創建”它。

使用靜態變量將導致這些項目在所有線程(因此所有用戶)之間共享。 這些可能應該轉換為會話變量。

除了執行靜態操作外,您還可以執行以下操作:

Session["provinceid"] = "0";
Session["branchid"] = "0";
Session["levelid"] = "0";
Session["groupid"] = "0";
Session["phrase"] = "";

正如Oded在他的回答中提到的那樣,該會話對於用戶而言已經是唯一的,因此無需使用“添加”方法。

無論何時使用此信息(用戶注銷等),都可以使用Session.Clear()方法,該方法將從Session對象中刪除所有鍵和值。

我知道我犯了一些錯誤,其中之一是在代碼隱藏頁上使用公共靜態變量

你是對的。 在Web應用程序上做這是一件很不好的事情。

您無需創建用戶會話,因為該會話在用戶首次訪問您的網站時已經自動創建。 為了以預期方式使用Session,您需要的是這樣的東西:

//Store value 
Session["Key"]=myValue;


//retrieve field
var myValue = Session["Key"];

您可以在所需的任何頁面上執行此操作,因為Session是全局對象。 不需要在登錄頁面上進行操作,但是只要您需要存儲特定於用戶的任何內容,就可以完成此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM