2012-07-11 54 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