ASP.NET が、どのユーザーがサーバー上のどのセッション変数に関連付けられているかを混同することは可能ですか? セッション変数は、時間、空間、および次元を超えて、それらを作成した元のユーザーに不変に関連付けられていますか?
8 に答える
セッション プロバイダーによって異なります。セッション キーの生成を一意ではない方法でオーバーライドした場合、複数のユーザーが同じセッションにアクセスしている可能性があります。
どのような動作が見られますか? そして、あなたが話している変数に静的なものはないと確信していますか?
元の質問に答えるには: セッションは、Cookie に配置された ID にキー設定されます。この ID は、いくつかの乱数暗号化ルーチンを使用して生成されます。一意であるとは限りませんが、セッションの存続期間中に重複する可能性はほとんどありません。セッションが終日稼働している場合でも。本当に人気のあるサイトが重複キーを生成するには、おそらく何年もかかるでしょう (それを裏付ける統計や事実はありません)。
あなたの問題は、セッション値が混同されていることにあるようには見えません。私が最初に検討し始めるのは、接続プーリングです。ADO は既定で接続をプールしますが、プールにないユーザー名/パスワードで接続を要求すると、新しい接続が提供されます。サイトが非常に大きい場合、将来的にパフォーマンスのボトルネックになる可能性があるヒント。SQL Server で作業してからしばらく経ちましたが、Oracle では、ユーザーの ID を切り替える呼び出しを行うことができます。SQL Server に相当するものがない場合、私は驚くでしょう。一般的なユーザー名/パスワードを使用して DB に接続し、その接続をコードの残りの部分に戻す前に、その ID スイッチ呼び出しを実行してみてください。
不可能です。セッションは作成者に関連付けられています。
混同したいですか、それとも混同しているように見える場合がありますか?
詳しくは:
ログインページからユーザーID/パスワードを取得してセッション変数に保存するアプリがあります。SQL Server への呼び出しを行うために、接続文字列に挿入します。
テーブルが更新されると、データベースで「system_user」を使用して、「最終更新者」ユーザーを識別します。リストに表示されるはずのユーザーが正しくないという奇妙な動作が見られ、別のユーザーが表示されます。
何でも可能です。. . .
いいえ、セッション状態をSQLサーバーまたはその他のアウトプロセスストレージに保存してからいじらない限り。. .
セッションはユーザーの Cookie にバインドされています。通常のシナリオで混乱する可能性はほとんどありませんが、分散セッション状態を使用している場合は問題が発生する可能性があります。
私の推測では、クラスの静的フィールドを再利用して接続文字列を保持していると思います。これらの静的フィールドは複数の IIS リクエストで再利用されるため、おそらく「最終更新者」で最後にログインしたユーザーしか表示されません。
ところで、本当に正当な理由がない限り、このように DB に接続するべきではありません。高負荷下でパフォーマンスを低下させる接続プーリングの使用を妨げています。
デバッガーを起動して、その接続文字列で正しい値が実際に渡されているかどうかを確認できますか? 問題がどちら側にあるかをすぐに特定するのに役立ちます。
また、接続コードに接続またはユーザーの静的プロパティが含まれていないことを確認してください。そうしないと、更新が開始される前に、あるユーザーの接続が最新のユーザーの接続に置き換えられる可能性があります。