2012-07-11 74 views
3

請幫忙!我正在使用Visual Studio,ASP.NET C#(.Net 4)編程: 我是一個PHP轉換器,試圖使用會話創建一個簡單的登錄頁面。眼看因爲我完全新的ASP.NET我用這個代碼從某處在互聯網上:ASP.NET會在創建會話時丟失CSS#

的Login.aspx:

<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox> 
<asp:TextBox ID="txtPassword" runat="server"></asp:TextBox> 
<asp:Button ID="submit" runat="server" Text="Submit" onclick="submit_Click" /> 
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 

Login.aspx.cs:

protected void send_Click(object sender, EventArgs e) 
     { 
     if (txtUserName.Text == "admin" && txtPassword.Text == "admin") 
     { 
      Session["Authenticate"] = "Yes"; 
      Response.Redirect("Default.aspx"); 
     } 
     else 
      Label1.Text = "Login failed"; 
     } 

全球.asax.cs

void Session_Start(object sender, EventArgs e) 
    { 
     // Code that runs when a new session is started 
     Session["Authenticate"] = ""; 
     CheckLogin(); 
    } 
void Application_OnPostRequestHandlerExecute() 
    { 
     CheckLogin(); 
    } 

    void CheckLogin() 
    { 
     string Url = Request.RawUrl; 
     int count = Url.Length - 10; 
     string TestUrl = Url.Substring(count); 
     string SessionData = Session["Authenticate"].ToString(); 
     if (SessionData == "" && TestUrl != "Login.aspx") 
     { 
      Response.Redirect("~/Login.aspx"); 
     } 
    } 

每當我嘗試在瀏覽器中運行此代碼時,我的CSS文件不會加載。這似乎與global.asax文件相關聯,因爲如果我註釋掉以上在global.asax.cs代碼片段中顯示的所有代碼,css會正確加載。

我試圖通過源代碼,這提供了以下錯誤打開CSS文件在瀏覽器中:

Session state is not available in this context. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: Session state is not available in this context. 

Source Error: 


Line 45:    int count = Url.Length - 10; 
Line 46:    string TestUrl = Url.Substring(count); 
Line 47:    string SessionData = Session["Authenticate"].ToString(); 
Line 48:    if (SessionData == "" && TestUrl != "Login.aspx") 
Line 49:    { 

Source File: D:\MyTestWebsite\Global.asax.cs Line: 47 

我已經使用主題使用App_Themes文件和在Web.config中定義它也試圖 - 給出一樣的問題。只有當會話相關的代碼被刪除時,css纔會顯示。

任何想法是什麼導致這???

+1

我會使用[Forms Authentication Provider](http://msdn.microsoft.com/en-us/library/9wff0kyh.aspx)代替。 – 2012-07-11 09:18:18

+0

感謝您的資源,它已經看起來像一個更好的方式去! – Nevan 2012-07-11 09:24:32

+0

當css文件從該行傳遞,然後沒有會話,所以一個解決方案是檢查'if(Session){}'然後運行它,或者使用System.IO.Path.GetExtension(HttpContext .Current.Request.Path)'。當然,所有這些都不如Tim提供的表單身份驗證提供程序好 – Aristos 2012-07-11 09:29:47

回答

1

問題是,您在嘗試加載靜態資源以及動態頁面時檢查登錄名。某些文件(如全局CSS)應該可用於完全匿名訪問,而不是在驗證邏輯後面進行選通。

由於由大型成員資格提供程序庫支持的Forms身份驗證中內置的內置功能爲您提供了豐富的基礎,因此您絕對可以重新發明輪子。如果您選擇繼續使用此方法,我的建議是查詢請求的文件,並確保它們在請求身份驗證之前請求aspx(假設您未使用url重寫)。

+0

感謝 - 直到今天早上我都不知道表單身份驗證甚至存在:D在玩了它之後,我發現它不那麼複雜,並且即時可用的控件可以完成我所需要的任何操作,而不會造成任何其他問題。 – Nevan 2012-07-11 13:08:59