私のプロジェクトには5つ.aspx
のページがあります。最初の1つはログインページで、他はホーム、インデックスなどです。問題は、ユーザーがログインページにユーザーIDとパスワードを入力すると、ホームページである次のページに移動することです. しかし、ホームページの URL を単純に入力すると、ログイン認証なしでページも表示されます。
3 に答える
プロジェクトの現在の構造についてはSession
、ユーザーの資格情報を確認し、ログインしたユーザーの詳細を保存した後、ログイン ページで変数を作成できます。
ログインページで、ログインボタンクリックハンドラーはこれを行います:
protected void btnLogin_Click(object sender, EventArgs e)
{
string username= txtUsername.Text;
string pwd = txtPassword.Text;
//call your logic to verify user credentials.
VerifyUserCredentialFromDb(username, pwd);
if(UserValid)
{
Session["User"] = GetUserObject(username,pwd);
//whatever your logic is, make sure, you create the Session object, before
//below line,whereever you are doing it
Response.Redirect("Home.aspx");
}
}
および他のすべてのページの Page_load で
protected void Page_Load(object sender, EventArgs e)
{
if(Session["User"]==null)
Response.Redirect("login.aspx");
}
ところで、 Forms Authenticationを調べる必要があります。
この単純なフォーム認証の実装を見てください
フォーム認証を使用して web.config ファイルで認証を制御できます...
<system.web>
<authentication mode="Forms">
<forms name="MySite" loginUrl="~/Login.aspx" protection="All" timeout="30" path="/" requireSSL="false" slidingExpiration="true" cookieless="UseCookies"/>
</authentication>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
<location path="Members">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
これにより、Web サイトのメンバー フォルダーへのすべての不正アクセスがブロックされます。そのため、アドレス バーに入力するだけでhttp://localhost/Members/Default.aspx
、 のログイン ページに戻りますlocalhost/Login.aspx
。
<allow users="?" />
これにより、Members フォルダー内のページへのアクセスが明確に拒否されますが、その下に表示されている に置き換えることで、ホームページ以外のすべてへのアクセスをブロックするように書き換えることができます<deny users="?" />
。
通常、次のようなページにチェックを書きたいと思うでしょう (C#):
protected void Page_Load(object sender, System.EventArgs e)
{
if (Context.User.Identity.IsAuthenticated)
{
// User is logged in, continue
}
else
{
// No valid login...
Session.Clear();
Response.Redirect("~/Login.aspx");
}
}
お役に立てれば。
セッションでユーザー資格情報を保存する必要があります..およびaspxページのページ読み込みイベントで
protected void Page_Load(object sender, EventArgs e)
{
if(Session["Username"]==null)
Response.Redirect("login.aspx");
}
セッションがない場合は、ログイン ページにリダイレクトされます。