Coldfusionで複数のSessionTimeoutを使用する

さまざまな種類のユーザーを持つアプリケーションがあります。ユーザータイプに基づいてsessionTimeoutを設定する必要があります。たとえば、admin 30分、user 10分などです。これを行うために、application.cfcでデフォルトのsessionTimeoutを30分にしました。

   
    
    
    
    .............
    ............


アプリケーション変数をダンプすると、sessionTimeoutが600で正しいことがわかります。 onRequestStartメソッドで、今度はLoggedInユーザタイプをチェックし、それに応じてsessionTimeoutを設定するコードを書きました。


    
        
    

この後、アプリケーション変数をダンプすると、sessionTimeoutが秒単位ではなく日単位で表示されます。また、セッションは10分後に終了していません。 誰かがこれを手伝ってくれる?アプリケーションに2つの異なるsessionTimeoutを実装する方法また、sessionTimeoutをもう一度設定した後、sessionTimeoutが秒単位ではなく日単位で表示されるのはなぜですか。

2
ru de

4 答え

これらの関数の1つの内部から「this」スコープのメタデータを変更する方法はないと思います( onApplicationStart、onSessionStart、onRequestStart )。つまり、これらのメソッドでは this.sessionTimeout を設定できません。

I was recently looking into this ColdFusion 11: Changing Application "this" Scope metadata from different functions in extended Application.cfc

しかし、coldfusionによるすべてのリクエストにはメタデータが設定され、Ben Nadelによるこの記事に記載されているようなアプローチを使用してタイムアウトを設定するロジックを "this"スコープに移動し、動的セッションを作成してみてくださいタイムアウト

ユーザーまでのColdFusionセッションの持続性の遅延ログイン

おそらく、その時点でどのユーザーがログインしているのかを考え出すために創造的にならなければならないでしょう(たとえ後で認証が行われたとしても...タイムアウトを設定することに何らかの害がある場合)。

1
追加された

セッションタイムアウトはすべてのユーザーに共通です。タイムアウト期間は、最初の要求が来たときにアプリケーション全体で設定されます。

簡単に言うと、2つの異なるセッションタイムアウト期間を設定することはできません。

0
追加された
これを行う最も恐ろしい方法は、 session スコープに変数を設定し、リクエストごとにその変数をテストおよび更新することです。あなたはそれからあなた自身のセッションチェックを構築しなければならないでしょう。 OT:システムの機能を低下させるようなものを構築するように頼まれたときは、通常プッシュバックします。あなたが防ごうとしていることは何ですか?そして、これはどのようにあなたが存在するかもしれないと思う今までの問題を解決することになっていますか?
追加された 著者 James A Mohler,
私はあなたがFW/1を使っていることを知っています。すべてのセキュリティが application.cfc でどちらか一方の方法で処理されると、LOEが得られるはずです。 OTOHさん、 session はCFの観点からは適切である可能性がありますが、ビジネスロジックの観点からは無効であると考える必要があります。
追加された 著者 James A Mohler,
これを達成するために、私ができる調整はありますか?
追加された 著者 Vineesh,
それはクライアントからの要求でした、私はそれらが納得できる他の解決策が利用可能であるかどうか見つけようとしていました。
追加された 著者 Vineesh,

これがあなたが使用できる一つの方法です。それはあなた自身のセッション管理クライアント側を作成するようなものですが、それはユーザロールごとのカスタムセッションタイムアウトを可能にします。 セッションスコープ内に、ユーザーがアプリにログオンした現在の時刻に初期設定されているタイムスタンプを作成します。アプリのクライアントJavaScriptで、関数を1分ごとに呼び出すタイマーを作成するか、サーバー側の関数を呼び出して、そのユーザーの最後に記録されたタイムスタンプから経過した時間を確認します。経過時間がそのユーザーの役割で許可されている最大時間に達した場合は、JavaScript関数を使用してユーザーをログアウトします。
 この方法では、ユーザーがアプリと対話するたびに(スクリプトの実行、cfcライブラリ関数の呼び出しなど)、ユーザーがアプリをアクティブに使用している間にログアウトされないように、タイムスタンプをリセットします。ユーザーは、ユーザーが定義した "x"分の非アクティブ時間が経過した後にのみログアウトされます。また、サーバー側で呼び出す関数は、ユーザーロールごとのその数をさらに定義できます。

0
追加された

私はこれをrailoで使ったことがありますが、私はそれがcoldfusionにも当てはまると思います。

getPageContext().getSession().setMaxInactiveInterval(javaCast("int", 60));

これは基本的に現在実行中のリクエストのセッションタイムアウト値を60に設定します(分か秒かは覚えられません)

0
追加された