かなり長い間デバッグして検索しましたが、何が起こっているのかわかりません。を行うのはこれが初めてcustom session handler
なので、痛いほど明白な何かを見落としているのではないかと心配しています。カスタム セッション ハンドラーを実装して、セッションと共に追加情報を保存し、特定のユーザー グループのサイトの保護領域へのアクセスを一時的に無効にできるようにしたいと考えています。
私のログイン ページ (基本的なファイル ベースの php セッションで問題なく動作していました) には、セッション ハンドラー関数とエラー ハンドラーを含む多くの関数を含む php ファイルが含まれています。そのインクルード ファイルには、データベース接続を行う 3 番目のファイルが含まれています。接続は を使用mysqli_connect()
して作成され、結果のリンクは変数 に格納されます$dbc
。その同じ接続は、エラーのログ記録、サイト コンテンツの読み込み/編集などのためにサイト全体で使用されます。すべてのページで既に使用されており、ほぼすべてのページでセッション ハンドラーを使用する必要があるため、同じデータベース接続を使用することにしました。同じように。私のコードでは、データベース接続を手動で閉じることはありませんが、何らかの形で自動的に閉じていると思います。
私の関数は、グローバル ステートメントを使用してデータベース接続 ($dbc) にアクセスします。元:
function sess_write($id, $data)
{
global $dbc;
...
my open
、read
、およびwrite
関数は、この方法で変数を使用することになっています。open 関数と read 関数でデータベース接続変数を確認したところ、予想どおり null ではありませんでしたが、書き込み関数では突然 null として表示されます。PHP は、読み取りと書き込みの間で、その接続を閉じる可能性のある何かを行っていますか? データベース接続を作成する同じインクルードファイルにテスト変数を作成global $test;
し、書き込み関数で同じステートメントを使用しました。その変数は問題なく表示されるため、データベースが閉じられていることに関係があると推測しています。データベース接続を格納するために 2 番目の変数を使用しようとしましたが (セッション ハンドラーによってのみ使用されます)、それも機能しませんでした。何か案は?私はいつものように愚かなだけですか?