2012-07-18 66 views
0

在我的頁面中,我重新生成每個按鈕上的會話ID以進入下一頁。我已經在登錄時在會話變量(session [「uname」] = txtusername.text)中保存了用戶名。但是,當我重新生成新會話ID時,session [「uname」]具有空引用,因爲這就是爲什麼我想使用Global.asax會話啓動功能中設置會話變量值的原因。如何從全局asax後面的代碼中訪問值

void Session_Start(object sender, EventArgs e) 
    { 
     session["uname"]=here; 
    } 

但在這裏的Global.asax頁我無法訪問從我的登錄頁面的任意值。主要問題是從後面的代碼中訪問global.asax中的任何值。 我怎樣才能解決這個...... PLZ幫助......感謝提前..............

+0

您應該看看以其他方式存儲頁面級信息,而不是訪問Global.asax中的控件。另外,請問爲什麼每次都必須重新生成會話ID? – rikitikitik 2012-07-19 05:48:02

回答

0
HttpContext.Current.Session["uname"]=here; 
+0

** thnks v much ... bt主要問題是從代碼後面訪問任何變量/控制值到global.asax頁面..我無法從登錄頁面訪問文本框值或global.asax中的任何變量。 ... ** – 2012-07-19 05:39:34

0

首先不`噸寫Global.asax中的業務邏輯。 我想指出你出3米基本的東西:

  1. 當在session_start()呼籲
  2. 如何會話保持
  3. 您應該在哪裏設置你的會話變量。

對於以下細節我假設你有login.aspx的,login.aspx.cs:

正如你所知道HTTP是無狀態的協議,所以每一個請求是新的請求。 因此,對於每個請求session_start()都會執行。

當用戶第一次請求資源時,將生成唯一會話,並將包含會話ID的cookie發送到客戶端。

對於用戶的任何進一步請求,HTTP客戶端會將cookie傳遞給服務器,以便用戶可以被服務器跟蹤。這是會話的工作方式。


現在讓我們來看看您在Gloabl.asax的session_start()中設置Session [「uname」]的代碼,請記住Globlax.asax在頁面生命週期開始之前調用 ,因此它無法訪問到頁面數據。

Instade你應該在login.aspx.cs文件中設置你的Session [「uname」]。這裏檢查用戶憑證是否正確:
set Session [「uname」] = value。

現在對於其他任何請求,該用戶的Session [「uname」]將可用。你也可以在Global.asax的session_start()中檢索/更新值。

+0

爲什麼我應該在多個級別上使用常量會話密鑰「uname」?例如,我可以通過''HttpContext.Current.ApplicationInstance'設置或檢索當前會話區域設置,並將其轉換爲類後面的global.asax代碼,所以我不需要在代碼中使用像''uname''這樣的鍵。 – djmj 2012-08-22 14:02:13

相關問題