1

localhost で実行されている Web ページで、Web ページのリンク (アドレス リンク) をコピーしてから、別のタブまたはブラウザーにコピーすると、開かず、ログイン ページが表示されます。

たとえば、ウェブページは

Login.aspx
Account.aspx

ログインすると、アカウント ページが開きます。アドレス リンクをコピーして、別のタブまたはブラウザで開いてみてください。すぐにアカウントページが表示されます。

ログインページなしでアカウントページを直接開くべきではありません。

Web ページを保護する方法。

いくつかの例が必要です。

4

8 に答える 8

1

これは機能します。それをContext.Itemsに保存し、リクエストを他のページに転送します。

//In Login.aspx
Context.Items["userName"] = myValue;
Server.Transfer("Account.aspx");

//In Account.aspx
protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostback)
   {
      if (UserName == null)
      {
         UserName == Context.Items["userName"];
      }
      if (UserName == null)
      {
         Server.Transfer("Login.aspx");
      }
   }
}

    private String UserName
    {
        get
        {
            if (ViewState["UserName"] != null)
            {
                return ViewState["UserName"].ToString();
            }
            else
            {
                return null;
            }
        }
        set
        {
            ViewState["UserName"] = value;
        }
    }

繰り返しますが、ページを別のタブで機能させたくない理由がわかりません。しかし、これはあなたのために働くでしょう。

于 2010-08-19T11:21:29.823 に答える
1

私の理解が正しければ、これが Web ブラウザのデフォルトの動作だと思います。gmail、hotmail、またはログイン/ログアウト セッションを提供するその他の Web アプリの場合も同じです。Gmail にログインし、連絡先ページを開き、連絡先ページの URL をコピーして別のブラウザー タブに貼り付けると、ログイン ページを求められることなく同じ連絡先ページが表示されます。

この記事は理解に役立つかもしれません。回避する方法を提供します。

ほとんどの Web アプリケーションはセッション マージを想定して作成されているため、セッション マージの適切なサポートは重要です。たとえば、Web アプリケーションがポップアップ ウィンドウを開くとき、通常は、ポップアップ ウィンドウがメイン ウィンドウと Cookie を共有することを期待して、ユーザーがログインしたままになり、ユーザーの設定が引き続き利用できるようにするなどのことを行います。同様に、ユーザーが [タブの複製] コマンドを使用する場合、ユーザーは新しいタブに元のタブと同じコンテンツが表示されることを当然のように期待します。このシナリオが正しく機能するには、Cookie を共有することが重要です。

于 2010-08-08T11:19:58.920 に答える
1

出来るよ。ロード イベントとアンロード イベントをセッションに設定する必要があります。状態に応じて、ログインまたは要求されたページを表示するかを決定できます。セッションへの設定は、AJAX 経由で行うことができます。

于 2010-08-08T10:07:57.393 に答える
1

必要なことを行うには、ブラウザーのタブがどのように機能するかを理解する必要があります。通常、それらは Cookie とセッション状態を共有します。そのため、Web サイトでセッションを行っている場合、リンクをクリックするか、新しいウィンドウを開くと、セッションはそこで続行されます (そのため、いくつかのセキュリティの問題が発生します)。 .

あなたの問題を解決するには、他の方法でセッションを維持する必要があります...そして、それは簡単ではありません...

したがって、本当にそれを行う必要がある場合は、ページに共有されていない独自のものを用意する必要があります. 選択したすべてのリンクに渡される隠しフィールドを設定できます。しかし、それはあなたのページを管理するための多くの作業を意味します. そして、それは他のセキュリティ問題をもたらします(誰かがセッションよりもリンクを送信した場合など:-(

あなたがそれを行うことができる1つの奇妙な方法は、フレームを持つことです. ベースページ(フレームを含むページ)で、セッションをJavaScriptに保存します。次に、すべてのページがトップページがあるかどうか、および有効なセッションがあるかどうかを確認します。新しいタブを開いてリンクをコピーすると、フレーム ページがきれいになるため、新しいログインが必要になります。このようなことを行うことに付随する他のセキュリティ上の問題があるかどうかはわかりません

于 2010-08-08T10:16:29.433 に答える
1

セッションはタブとウィンドウ間で共有されます。異なるブラウザー (IE や Firefox など) 間で共有されることはありません。

タブ間で変数を分離しておく必要がある理由がわかりません。

必要に応じて、あるページから別のページに値を POST できると思います。Page_Load で、isPostback でない場合は、その値を ViewState に格納します。値が受信されない場合は、ログイン ページにリダイレクトします。

しかし、なぜこれをやりたいのかをもう一度考えたほうがよいでしょう。あなたの目標を達成するためのより良い方法があるかもしれません。

于 2010-08-08T10:26:33.310 に答える
0

リファラーが null またはログイン ページでない場合はリダイレクトします。

if (Request.UrlReferrer == null || !Request.UrlReferrer.LocalPath.Equals("/website1/account/login.aspx",StringComparison.OrdinalIgnoreCase))
{
    Response.Redirect("/website1/account/login.aspx");
}
于 2010-08-08T11:07:16.097 に答える
0

ユーザーがログインしていないときに にアクセスしたLogin.aspx場合にリダイレクトするのはどうですか?Account.aspx

それが、ほとんどのサイトの運営方法です。

セッション状態を確認して、それに応じAccount.aspxてリダイレクトできます。Login.aspx

于 2010-08-08T10:10:14.533 に答える
0

これは、ページをデザインするための良いアプローチではありません。HTTP はステートレスです。つまり、ログインしているユーザーのセッションを維持する一般的な方法は、ランダムなセッション文字列を含む Cookie を使用することです。この文字列はリクエストごとに送信され、サーバーは文字列がセッションに関連付けられているかどうかを確認します。

ここで問題なのは、このセッション文字列が純粋にクライアント側で実行されているユーザーのブラウザーによって管理されるということです。ブラウザに別のタブの文字列を「忘れさせる」ことができますが、これは複雑で風変わりです。

これが何らかのセキュリティ上の問題である場合は、実行しないでください。:) サイトをより安全に保つためにクライアント側のロジックを信頼しないでください..

[編集] ユーザーが最初のタブにログインし、その後ログアウトしなかったということですか?

于 2010-08-08T10:13:08.563 に答える