別のブラウザタブでユーザーを編集製品ページに誘導するインデックスページがあります。ページリフレッシュ対IsPostBack
インデックスが編集された製品ごとに、セッション["ProductID"]が書き換えられます。
Editページでは、このタブと製品の一意の識別子を持っているために、次のコードを持っています
if (!IsPostBack) //first time page load
{
Random R = new Random(DateTime.Now.Millisecond + DateTime.Now.Second * 1000 + DateTime.Now.Minute * 60000 + DateTime.Now.Minute * 3600000);
PageID.Value = R.Next().ToString();
Session[PageID.Value + "ProductID"] = Session["ProductID"];
}
これは動作しますが、同じユーザーが複数のタブを開いたとき、私は唯一のセッション[PageID.Valueを参照+ "ProductID"]私のコードでは、私は常に適切なIDを持っています。 (私はイントラネットのための信頼できる環境で働いているので、私はセキュリティのレベルではあまり気にしません)。
ユーザーがF5キーを押してページを更新すると、問題が発生します。セッション[PageID.Value + "ProductID"]は、彼が最後に開いた製品のSession ["ProductID"]を取得します。例えば
:
ユーザー1は、彼らは通常、すべてが正常に動作ツールを使用するたびに
ユーザー1は、TAB2に
をproduct2を開き、TAB1に製品1を開きます。ただし:製品1ページで
ユーザー1は、更新ボタン(F5)をヒット製品1ページがproduct2ページ
なっからページの更新を検出するためにそこの方法ですので、「最初のロード/他のページからのリダイレクト」セッション[PageID.Value + "ProductID"]を更新しないように私のページに伝えることができますか?
Request.Headers ["HttpReferer"]の存在をテストするかどうかを素早くテストする価値があります。 –
私はRequest.UrlReferrer.ToString()を試してみましたが、最初にページを読み込むときに、インデックスページを参照元として取得しました。 残念ながら、F5キーでページを更新すると、インデックスページが表示されます。リファラーが変更される唯一の方法は、編集ページでポストバックを実行すると、リファラーが編集ページになります。 – LanFeusT