0

ログインページと、ログイン後にユーザーがリダイレクトされるグローバルページがあります。

ユーザーがログインしていない場合にアクセスされる一部の Web ファイルを保護するために、これが適切な方法であるかどうかを知る必要があります。

global.aspxコード (ユーザーがログイン後にリダイレクトされる保護されたページ)

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["Login"] != null)
        {
            if (Session["Login"].Equals("Logged"))
            {
                userName.Text = (string)Session["UserTest"].ToString();
            }
        }
        else
            Response.Redirect("http://localhost:port/Login.aspx");
    }

ログインページのコード:

Session["Login"] = "Logged";
Session["UserTest"] = "Test123";
Response.Redirect("http://localhost:port/Global.aspx");

ありがとう

4

1 に答える 1

2

フォーム認証について読むべきだと思います。そして、それに関する別の記事。あなたが書いたコードは問題ないように見えますが、あなたは車輪を再発明しています。

フォーム認証の考え方は、現在認証されているユーザー名が暗号化された Cookie に保存され (別途定義されていない限り)、各要求と共に送信されるというものです。アクティブ化されたフォーム認証モジュールは、各リクエストでこの Cookie の存在を確認し、Userプロパティを自動的に割り当てて、すべてのページで使用できるようにします。また、誰かが保護されたページにアクセスしようとすると、モジュールは で構成されたログイン ページにリダイレクトしますweb.config。一方、 web.configの<location>要素を使用すると、アプリケーションのどのページ/フォルダーで認証が必要かを指定できます。

フォーム認証を有効にすると、保護されたページは次のようになります。

protected void Page_Load(object sender, EventArgs e)
{
    userName.Text = User.Identity.Name;
}

そしてLoginページ(保護されるべきではない):

public void Login_Click(object sender, EventArgs e) 
{
    if (Membership.ValidateUser(userName.Text, password.Text))
    {
        FormsAuthentication.RedirectFromLoginPage(username.Text, false)
    }
    else
    {
        errorLabel.Text = "Invalid credentials";
    }
}

これをさらに簡素化できるLogin コントロールをチェックアウトすることもできます。

于 2012-07-15T19:36:27.950 に答える