19

Web で多くの検索を行った後、何も見つからなかったので、非アクティブ期間後に Symfony Security を介してログインしたユーザーを自動的にログアウトする簡単な方法があるかどうか疑問に思います。たとえば、ユーザーが 30 分間操作を行わないとログアウトするようにします。

このようなカスタム ユーザー プロバイダーを使用します。

ただし、ユーザーがシステムにログインした後、セッションが期限切れになることはありません。ブラウザを閉じて数日後に再度開いても、セッションは有効です。

このユーザーを自動または手動でログアウトする方法はありますか? どうやってやるの?

4

9 に答える 9

16

次の設定は、30 分以上非アクティブなユーザーをログアウトします。リクエストが 29 分ごとに行われる場合、ログアウトされることはありません。これをローカル環境でテストするのは簡単ではないことに注意してください。ガベージ コレクターはリクエストからのみ呼び出されるため、gc_maxlifetime に到達することはありません。

#app/config/config.yml
session:
    cookie_lifetime: 86400
    gc_maxlifetime: 1800

より多くのブラウザー/セッションを開き、次の構成を使用すると、これをテストできます。

#app/config/config.yml
session:
    cookie_lifetime: 86400
    gc_maxlifetime: 1800
    gc_probability: 1
    gc_divisor: 1

それが役立つことを願っています!

追加することに注意してください:

 session:
    gc_probability: 1
    gc_divisor: 1

ガベージ コレクターがセッションを削除する原因となる他の要求がないローカル環境でガベージ コレクターをテストすることのみを目的としています。すべてのリクエストでガベージ コレクターを実行することは、生産的な環境では意図されていません (または必要ではありません)。

于 2014-01-22T14:11:09.660 に答える
1

Symfony 2.4 では、1 時間のタイムアウトで次のように動作しました。

framework:
    #esi:             ~
    translator:      { fallback: %locale% }
    secret:          %secret%
    router:
        resource: "%kernel.root_dir%/config/routing.yml"
        strict_requirements: ~
        http_port: 80
        https_port: 443
    form:            ~
    csrf_protection: ~
    validation:      { enable_annotations: true }
    templating:
        engines: ['twig']
        #assets_version: SomeVersionScheme
    default_locale:  "%locale%"
    trusted_proxies: ~
    session:         
        cookie_lifetime:       3600
    fragments:       ~
    trusted_hosts:   ~
于 2014-03-03T20:59:19.567 に答える
0

どうですか:

#app/config/config.yml
framework:
    session:
        cookie_lifetime:       1800
于 2013-09-18T13:03:14.043 に答える
-1

Cookie の有効期間はクライアントによって操作される可能性があるため適切ではありません。そのため、サーバー側で有効期限を設定する必要があります。最も簡単な方法は、かなり頻繁に実行されるガベージ コレクションを介してこれを実装することです。cookie_lifetime は比較的高い値に設定され、ガベージ コレクション gc_maxlifetime は、目的のアイドル期間が何であれ、セッションを破棄するように設定されます。

framework:
    #esi:             ~
    #translator:      { fallback: "%locale%" }
    secret:          "%secret%"
    router:
        resource: "%kernel.root_dir%/config/routing.yml"
        strict_requirements: ~
    form:            ~
    csrf_protection: ~
    validation:      { enable_annotations: true }
    templating:
        engines: ['twig']
        #assets_version: SomeVersionScheme
    default_locale:  "%locale%"
    trusted_hosts:   ~
    trusted_proxies: ~
    session:
        # handler_id set to null will use default session handler from php.ini
        #handler_id:  ~
        cookie_lifetime: 9999
        gc_maxlifetime: 900
        gc_probability: 1
        gc_divisor: 2
    fragments:       ~
    http_method_override: true
于 2015-09-22T00:21:18.117 に答える