2

エラーメッセージが表示されます:「auth.USR_xIDはセッションで定義されていません」は完全に再現可能ではありませんが、あちこちにあります。ただし、変数は25行目で定義され、77行目と265行目で使用されていますが、ここではエラーがスローされます。つまり、そのページの1,000回目のリクエストごとです。

Line 25: <cfparam name="session.auth.USR_xID" default="#SESSION.auth.USR_ID#">
some more code
Line 77: <cfset USR_Pointer = "#SESSION.auth.USR_xID#">
some more code
Line 265: <cfif session.auth.usr_id IS session.auth.usr_xid>
...

同様のケースを見つけようとしましたが、見つかりませんでした。ページをロードし、セッションを強制終了してから、送信を押しました。すべてがうまくいきました。エラーを再現できませんでしたが、発生します。100万人を超えるユーザーがいて、1秒間に10以上のトランザクションがあります。アイデアを持っている人はいますか?

4

3 に答える 3

2

@Derrickは良い答えを出しました。もう1つの可能性は、ユーザーがアプリケーションの2つのインスタンスを開いている場合です。2つのタブまたは2つのブラウザウィンドウにある可能性があります。これにより、2つのセッションが互いに干渉する可能性があります。一方のタブでセッションがタイムアウトし、もう一方のタブが台無しになる可能性もあります。

于 2013-01-25T01:49:50.850 に答える
1

IF-IF-これが公開されているサイト/ページである場合、おそらくボットが原因です。ボットがコードにハングアップする場合としない場合があります。具体的には、25行目と77行目(または265行目)の間でボットが何かに引っ掛かる可能性があり、ボットは通常セッションを保持しないため、エラー。ボットを選別し、ボットの「ユーザー」に変数を割り当てます。ユーザーが(変数ごとに)ボットである場合、私は別のことをします。わかる?これが公開サイトでない場合、私はあなたに答えを持っていません。しかし、私自身の経験では、ユーザーがページにX時間「座って」、セッションを強制的に再開せずにリロードできない限り、これらのタイプのエラーを引き起こすのは常にボットです。

于 2013-01-25T01:16:06.047 に答える
1

私はDanに同意します。アプリケーションを複数のタブに配置することは、セッション状態を混乱させる非常に簡単な方法です。

私の最後の仕事で、私たちは患者管理システムを書きました。ユーザーはそうするでしょう。

  • ログイン現在のタブで患者Aに移動し、いくつかの「作業」を行います。
  • 新しいタブを開きます-患者Bの記録で何かをするために。
  • 患者Aの元のタブに戻り、そこでさらに編集します。

しかし、患者Aタブで行われた変更は、患者Aではなく患者Bに起因するようになりました(患者IDをセッションスコープに保存し where patientid = "#session.patientid#"、すべてのクエリで使用していました)。

セッション識別子にタイムスタンプを追加してタブ内で一意になるようにすることでこれに対抗するために、いくつかのJSトリックと追加のCFMLコードも実装する必要がありました。

次に、ユーザーの認証/承認を維持するためのコードを作成する必要があります。これは、同じ古いセッションではなく、新しいセッションがあるためです。これは、私たちにとって大きな問題でした。

また、原因とその修正方法を把握するのにも非常に長い時間がかかりました。

複数のタブを使用しないようにユーザーに指示するだけでは(私たちにとっても実行可能な解決策ではありませんでした)、技術的な解決策を見つけることに固執しました。

もはやそこでは働いていませんが、レビューしたいのであれば、おそらくこの作業に使用したコードの部分を取得できますか?

于 2013-01-25T16:07:23.563 に答える