2

私のアプリケーションでは、ユーザーが私のウェブサイトにアクセスするたびに、そのユーザーをセッション ID でチェックし、別のセッション ID の場合はデータベースに挿入 (すべての詳細 IP、ブラウザーなど) を行います。

string sessionId = HttpContext.Current.Session.SessionID;
if (objDB.checkDuplicate("session", "sessionId", sessionId))
{
    // code to make insert in database
}

しかし、データベースをチェックすると、同じ IP から同時に複数の挿入が行われます。

なぜこれが起こるのか誰か説明できますか?

注 :ユーザーの SESSION は異なるため正常にcheckDuplicate()動作しますが、ユーザーが同時に異なるセッション ID を持つにはどうすればよいでしょうか? (またはそのような種類の時間)

4

2 に答える 2

4

おそらく、複数の人がルーターまたはプロキシ サーバーを介して同じ接続を共有している可能性があります。

于 2012-10-03T15:44:49.710 に答える
2

同じ IP に対して異なるセッション ID を持つその他の理由 (ルーター/プロキシの背後にある可能性が最も高い)

  • ブラウザを再起動すると、同じユーザーの新しいセッション ID が作成されます (セッション Cookie に設定されている場合)。
  • 別のブラウジング セッションを開く (つまり、IE の通常対プライベート。構成とブラウザ タブに応じて、別のセッションとして扱われる場合があります)
  • 同じコンピューター上の異なるユーザー

セッション ID が異なるもう 1 つの理由は、リクエスト間で持続セッション Cookie を設定できなかったことに基づいています。

  • ASP.Netへの書き込みがない場合、リクエストごとにセッション状態Cookieを再生成できると思います(確認が必要です)
  • Cookie が無効になっている可能性があります (まれですが、可能性があります)
  • Cookie がブロックされている (つまり、IFrame のページ/画像に対する P3P ポリシーがない) か、ブラウザの他のポリシーがブロックされている可能性があります。

同じユーザーの同じ sessionId に対して複数のブラウザー ウィンドウを取得する正当な理由があります (同じ "ブラウザー セッション" のタブ、Ctrl+クリックで "新しいウィンドウ/タブで開く")。サイト作成者は、「単一セッション = 単一ウィンドウ」ポリシーを適用するか、同じセッションで開いている可能性のある複数のウィンドウに対処するかを決定する必要があります。特にGETリクエストをサポートする必要がある場合、同じセッションIDが異なるタブで使用されている場合を検出する合理的な方法はありません(そうでない場合は、隠しフィールドにいくつかの追加IDをダンプできます)。

于 2012-10-03T16:03:20.090 に答える