2011-11-24 51 views
1

我目前使用會話在我的Web應用程序中保存用戶ID。而且我讀了很多關於會議是邪惡的,所以我的計劃是找到另一個解決方案。用戶ID的變量,在整個頁面創建過程中都可以訪問(而不是會話)

所以我的下一步是使用加密的cookie。 喜歡的東西:

userInformation: ENCRYPT(UserID,subdomain,someComputerUniqueValue,hashvalueOftheString) 

每個用戶都有自己的子域名,所以用戶名和子域必須匹配。 但是。現在幾乎每一頁我都會調用會話值來獲取用戶ID。 我想把這個改成某種變量,但是什麼樣的變量?! 我現在在httpmodule中設置會話值。在

public void Application_PreBeginRequest 

是否有可能在內部創造application_prebeginRequest一個變量,創建網頁的過程中讀它在其他地方。例如在主頁中,或者在內容頁面上。或在特定頁面使用的類。 當頁面被創建併發送到客戶端時,該變量應該死掉。

我在找什麼樣的變量?它是全局變量嗎?如果不是,什麼是全局變量?

感謝您的閱讀! 馬蒂亞斯R.

編輯:

這個cookie不進行身份驗證。我想保存連接到子域的用戶的ID,所以我不必在每次訪問頁面時都運行「來自帳戶的SELECT ID,其中subdomain ='somethin'」查詢。

+0

爲什麼你想避免這個會話? – CodesInChaos

+0

我讀過很多關於會話的不好的東西。我想了解更多的asp.net。 – Easyrider

+0

會議不是「邪惡」。也許你不明白你讀的是什麼。 –

回答

1

你可以在HttpContext.Current.Items裏面存儲你需要的東西。存放在其中的項目將僅在當前Web請求期間存在,並將在Web應用程序中全局使用。

// Global.asax 
void Application_BeginRequest(object sender, EventArgs e) 
{ 
    HttpContext.Current.Items["hello"] = DateTime.Now; 
} 
// Default.aspx 
public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Label1.Text = HttpContext.Current.Items["hello"].ToString(); 
    } 
} 

順便說一句,在事件的Application_BeginRequest,Session對象不可用。

有關HttpContext.Current.Items的更多信息,請參閱http://www.4guysfromrolla.com/articles/060904-1.aspx

+0

非常感謝! – Easyrider

+0

親愛的downvoter,請提供爲什麼這個答案不適合這個問題。謝謝。 – Fabio

+0

無論如何,你會得到「接受的答案」:D和我的加分。 – Easyrider

1

用戶通過身份驗證後,爲什麼不用FormsAuthentication.SetAuthCookie登錄?

然後,您可以使用HttpContext.Current.User.Identity.Name檢索當前登錄的用戶。

+0

我要去看看那種方法。但它實際上不是我正在尋找的認證。我想要使​​用此cookie保存連接到該子域的用戶的ID。所以我不必每次創建頁面時都從數據庫獲取ID。 – Easyrider

+0

您可以提供任何想要的SetAuthCookie標識符,只要它可以轉換爲字符串並且在您的用戶中是唯一的,那麼使用您的用戶ID就不會有問題。 –

+0

好的,謝謝!我將閱讀這篇文章。 – Easyrider

0

會話不是「邪惡的」會話存儲在服務器上,對於少量數據(如您的建議),它會很好地擴展。

+0

好的。我僅存儲accountID,userID和adminID的ID,3個整數。即使我不使用例如userID和adminID,我聽說內存使用情況是相同的,就好像每個訪問者使用全部三個值一樣。這是真的?所以只是爲了加深理解。可以說我在會話變量中使用3個整數,並且有10萬個訪問者,我的會話對象使用多少MB內存? – Easyrider

+0

你有那麼多的遊客_在同一時間_? –

+0

不,我不。它只是用於計算。 – Easyrider

相關問題