创建会话时,ASP.NET C#CSS会丢失

时间:2012-07-11 09:10:47

标签: c# asp.net css

请帮忙!!我正在使用Visual Studio,在ASP.NET C#(.Net 4)中编程: 我是一个PHP转换器,尝试使用会话创建一个简单的登录页面。因为我在ASP.NET上是全新的,所以我在互联网的某个地方使用了这个代码:

的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";
        }

的Global.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 个答案:

答案 0 :(得分:1)

问题是您在尝试加载静态资源以及动态页面时正在检查登录。某些文件(例如全局CSS)应该可用于完全匿名访问,而不是在身份验证逻辑后面。

由于大型会员提供商库支持的内置表单身份验证为您提供了丰富的扩展基础,因此您无疑正在重新发明轮子。如果您确实选择使用此方法,我的建议是查询所请求的文件并确保他们在请求身份验证之前请求aspx(假设您没有使用url重写)。