問題タブ [session-set-save-handler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - session_set_save_handler gc($maxlifetime) 作業コンセプト
php.net マニュアルのsession_set_save_handler
例はファイル ベースです。私はそれをmysqlに実装しようとしました。
Windowsでユニサーバーを使用しています。エラー表示の私の設定は開発環境です。
私の問題は、ガベージコレクション機能を自動的に機能させることができなかったことです。エラー/警告はありませんでした。関連するすべてのコードは以下のとおりです。
私が自動的に意味するのは$handler->gc($maxlifetime);
、セッションのテスト後に index.php で使用すると、動作して期限切れの行が削除されるということです。
index.php で使用しない$handler->gc($maxlifetime);
と、期限切れの行が残ります。
私の質問
q1 - $handler->gc($maxlifetime);
index.php で使用する必要がありますか?
q2 - q1 の答えが YES の場合、コールバック関数に関数がある理由gc
。
q3$handler->gc($maxlifetime);
- q1 に対する答えが NO の場合、ブラウザ (ie11) を閉じて index.php を更新し、mysql セッション テーブルを確認した後、期限切れの行が削除されないのはなぜですか (index.php にない場合)。$maxlifetime
1 (秒)であることに注意してください。
感謝をこめて
私のindex.php
MySessionHandler クラス
セッション テーブルの関連 SQL
php - php7 (session_set_save_handler) で壊れたカスタム session_handler
PHP7 にアップデートした後、アプリケーションのセッション処理に問題が発生しました。
大きな問題ではないようですが、PHP は毎回このエラーをスローします。
session_handler は特別なものではありません。JSON化されたセッションデータをredisなどに保存します。
どんな助けでも大歓迎です。
php - __destruct() メソッドでセッション変数を設定できないのはなぜですか?
__destruct() メソッドでセッション変数を設定してみます。メソッド __destruct() は実行中ですが、セッション変数が設定されていません。一方、__contruct() または他のメソッド (test() など) のセッションは期待どおりに動作します。
更新版。今、ネイティブの PHP セッションと Symfony コンポーネントを試してみましたが、どちらも __destruct() メソッドで動作しません。
php - セッションが破棄されたときに関数/ハンドラーを呼び出す
ユーザー認証を使用して PHP で Web サイトを作成しました。これにはセッションを使用しました。ユーザーがログインするとデータベースにフラグが設定され、ログアウトするとこのフラグがリセットされます。これにより、1 人のユーザーが Web サイトに複数回ログインできなくなります。
すべて正常に動作しますが、ユーザーがログアウトするのを忘れると、しばらくするとセッションが無効になります。ユーザーが再ログインしようとすると、フラグがまだ設定されているため、ログインできなくなります。
セッションが無効/破棄されたときに呼び出されるハンドラー/関数が必要です。これどうやってするの?
session_set_save_handler という関数があることは知っていますが、destroy 関数だけが必要です。他の関数は必要ありません。その関数で $_SESSION 変数にアクセスできますか? この変数にはユーザー ID が保存されているため、フラグをリセットする必要があります。
手伝ってくれてありがとう。