3

最近、xamp を実行している Windows 2003 サーバーから、PHP バージョン 5.3.3 を使用して apache を実行している Centos サーバーに移行しました。

元々、ユーザーが約 24 分後にログアウトされるという問題があったため、INI 変数を変更しsession.save_pathて問題を解決しました。しかし、何人かのユーザーはいまだ定期的に当社のウェブサイトからログアウトされています。異なる時間に異なるブラウザを使用している複数のユーザーに発生します。ページが未使用のままになっている場合もありますが、あるページから別のページを閲覧している場合もあります。

セッション関連の INI 設定は次のとおりです。

    session.save_handler = files  
    session.save_path = "/var/sessions"  
    session.use_cookies = 1  
    ;session.cookie_secure =  
    ;session.use_only_cookies = 1  
    session.name = PHPSESSID  
    session.auto_start = 0  
    session.cookie_lifetime = 86400  
    session.cookie_path = /  
    session.cookie_httponly =  
    session.serialize_handler = php  
    session.gc_probability = 1  
    session.gc_divisor = 1000  
    session.gc_maxlifetime = 86400  
    session.bug_compat_42 = Off  
    session.bug_compat_warn = On  
    session.referer_check =  
    session.entropy_length = 0  
    session.entropy_file =  
    ;session.entropy_length = 16  
    session.cache_limiter = nocache  

最初は、ブラウザーの Cookie に問題があるのではないかと考えました。コードで 24 時間後に Cookie が期限切れになるように設定されていても、ユーザーの 1 人が Cookie を無期限に設定していたためです。しかし、Cookie を削除して再度ログインさせた後、Cookie は適切に 24 時間に設定され、時期尚早にログアウトされるという同じ問題が発生しました。

セッションが tmp ディレクトリから移動されたため、毎朝午前 4 時にすべてのセッションを削除する cron ジョブ スクリプトを作成しました。

今日、サーバー上のセッションが削除されていないことを発見しましたが、ユーザーがサーバーに既存のセッションをまだ持っているにもかかわらず、ユーザーが再度ログインすると、新しいセッション ID を持つ新しいセッションが作成されています。

どんな援助でも大歓迎です。

4

1 に答える 1

0

サーバーがセッションを削除した後、Cookie の有効期限が切れたために問題が発生していたようです。

毎朝午前 4 時にサーバーからセッションを手動で削除するようにスクリプトをセットアップしましたが、Cookie は 24 時間保持されるように設定されていました。そのため、ユーザーが Web サイトに再度ログインしてサーバー上で新しいセッションを作成した後でも、Cookie の有効期限は更新されませんでした。

Cookie の有効期間を 12 時間に減らして、次回ユーザーがログインを要求される前に Cookie が常に期限切れになるようにしました。これで問題はなくなりました。

于 2012-09-05T15:12:13.847 に答える