3

助けてください!!私はVisualStudioを使用しており、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は、セッション関連のコードが削除された場合にのみ表示されます。

これを引き起こしているものは何ですか?

4

1 に答える 1

1

問題は、静的リソースと動的ページを読み込もうとするときにログインをチェックしていることです。特定のファイル (グローバル CSS など) は、完全な匿名アクセスに使用でき、認証ロジックの背後でゲートされないようにする必要があります。

メンバーシップ プロバイダーの大規模なライブラリによってサポートされる組み込みのフォーム認証は、拡張するための豊富な基盤を提供するため、間違いなく車輪の再発明を行っています。この方法を使用する場合は、認証を要求する前に、要求されたファイルを照会し、それらが aspx を要求していることを確認することをお勧めします (URL 書き換えを使用していないと仮定します)。

于 2012-07-11T12:42:39.800 に答える