マスターページの読み込みイベントに参加しているとします。ユーザーがログインしている場合は、Login.aspxからリダイレクトする必要があります。ログインしていない場合は、Login.aspxにリダイレクトする必要があります。しかし、最初に、彼らがどのページにアクセスしようとしていたかを知る必要があります。
この情報を取得するにはどうすればよいですか?
ありがとう
したがって、すべてのページの基本クラスを作成し、そのクラスでOnInit(EventArgs e)メソッドをオーバーライドすることができます。このメソッドでは、ユーザーがシステムに署名されているかどうかをチェックするコードを配置し(ユーザーを表すセッション変数がヌルでないことをチェックすることにより)、その変数がヌルの場合は、ログインページにリダイレクトします。このアプローチに従う場合、すべてのコンテンツページ(ログインページを除く)はこの基本クラスから継承する必要があります。
これがお役に立てば幸いです。
public class BasePage : Page
{
/// <summary>
///
/// </summary>
/// <param name="e"></param>
protected override void OnInit(EventArgs e)
{
if (Session["Usuario"] == null)
{
Response.Redirect(ResolveClientUrl("~/Login.aspx"));
}
}
}
を使用Request.RawUrl
して、要求されている現在のURLを取得できます。
if (Request.RawUrl.StartsWith("/login.aspx")){
//Check whether user is logged in
}
これは少し紛らわしいです。同じマスターページをコンテンツページ(default.aspxなど)からログインページ(Login.aspxなど)にリダイレクトし、ログインページからコンテンツページにリダイレクトする必要があります。これらのうちの1つを実行するだけで済みます。
まず、再帰的なループに巻き込まれるため、2つのマスターページが必要になります(またはLogin.aspxからマスターページを削除するだけです)。
ユーザーがサイトにアクセスしようとしたが、ログインしていないとします。Login.aspxにリダイレクトされ、ログインしていないことを確認して、Login.aspxにリダイレクトします。 ..
すでにログインしている場合は、Login.aspxからリダイレクトする必要はありません。ログインしていない場合を除いて、そもそもこのページにアクセスするべきではないからです。
最後に、マスターページでクイックチェックを実行して、ユーザーがログインしているかどうかを確認します。ログインしていない場合は、ログインページにリダイレクトして、URLのパラメーターとして要求していたページを渡します(前述のように、セッション変数の作成は機能しますそれも)。
If (!userLoggedIn)
{
Response.Redirect("Login.aspx?Url=" + Request.Url);
}
これにより、最初にパラメータとしてアクセスしたURLが渡されます(例:Login.aspx?Url = default.aspx)
次にLogin.aspxで
If (userSuccessfullyLoggedIn)
{
Response.Redirect(Request.Params["Url"]);
}
これにより、最初にリクエストしたページにリダイレクトされます(例:default.aspx)