問題タブ [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 - PDO の準備がサイレントに失敗する
私は PHP を試していてsession_set_save_handler
、PDO 接続を使用してセッション データを保存したいと考えています。
書き込みアクションのコールバックとしてこの関数があります。
最初の 2 つのログ メッセージは常に表示されますが、直後の 3 番目のメッセージ$stmt = $GLOBALS['db']->prepare($sql)
はログ ファイルに記録されず、例外の痕跡もありません。
セッションデータベース テーブルは空のままです。
コールバックからのログ メッセージ_close
は常に存在します。
データベースに接続する方法は次のとおりです。
PHP 5.2.10 を使用しています。
$GLOBALS['db']->exec($sql)
「手動で準備した」コンテンツで単純に実行しようとしまし$sql
たが、それでも黙って失敗しました。クエリ自体は問題なく、db コンソールから実行できました。
編集:
VolkerK が問題を特定した後、この奇妙な現象の背後にある理由を説明するこの記事を見つけました。ひょっとしたら、他の方にも参考になるかもしれません。
2回目の編集:
最も簡単な魔法の解決策は、以下の関数呼び出しをフロント コントローラー (メインの index.php) ファイルの最後に追加することです。
mysqli - DBに保存されたセッションを使用する場合のPHP mysqli->real_escape_string
わかりました、この質問を投稿する前に、すべてがうまくリストアップされていることを願っています.
1: ストアド プロシージャを使用せずに、mysqli とのシングルトン MySQL 接続を使用しています。
2: session_set_save_handler を説明するコードをオンラインで見つけ、それを MySqlSessionStore というクラスとして組み込みました。
3: 私の DB クラスには、次のパブリック関数があります。
と$this->_link = new mysqli($host, $user, $password, $database)
4:$db = MySQL::getInstance(array(DB_SERVER, DB_USER, DB_PASS, DB_NAME));
これは、静的 DB 関数を呼び出す方法です (ここで異常なことは何もありません)。
問題: コメントを外すまですべてが機能し$id = $db->escapeStringForDB($id);
、次のエラーが発生します。
非オブジェクトでメンバー関数 real_escape_string() を呼び出す
MySqlSessionStore のコード例:
その他の質問、備考:
- 私は session_regenerate_id() を使用していますが、明らかにこれは session_set_save_handler で削除する必要があります。
- 正確にはどこに置くの
session_write_close();
ですか?私は自分の db クラスのデストラクタでそれを取得しましたが、おそらくそれは行くべき道ではありません。 - 私はこれを他のプロジェクトに害を及ぼすことなく使用していますが、ここではセッションハンドラーの動作が異なり、混乱しているようです:)
事前に感謝します。さらに情報が必要な場合は、喜んで提供します。
php - PHP: セッション終了時変更 DB
プロジェクトにPHPを使用しています。ユーザーがブラウザーを閉じるとセッションが終了し、ログアウトされるように、セッションの有効期間を 0 に設定しました。ただし、ユーザーがログインしているかどうかを示す情報を格納するステータス変数が DB にあります。これを使用して、特定のユーザーのステータスを他のユーザーに通知します。
セッションが終了したときに、DB の値を変更する関数を呼び出すにはどうすればよいですか? session_set_save_handler() のオーバーライドについて調べました。しかし、そのためには、関数全体をオーバーライドして、独自のセッションを定義する必要があります。DB 変数を変更するために呼び出される関数はありますか?
私が達成しようとしていることを実装するためのより良い方法はありますか?
ありがとう
編集:私と同じ状況にある人のために、私はnikicが提案したことをしました. すべてのユーザーがアクセスした各ページを追跡するログがあります。ユーザーがオンラインかどうかを確認するために、DB をチェックして、ログイン変数が設定されているかどうかを確認し、最近のアクティビティがあったかどうかを再確認して、ユーザーが実際にオンラインかどうかを確認します。
php - session_set_save_handler-このコードが機能しないのはなぜですか?
PHPセッションデータをMySQLデータベースに保存しようとしましたが、機能させることができません。
簡単な例として、訪問ごとにカウンターをインクリメントするコードを次に示します。他の例などを見たことがありますが、なぜこのコードが機能しないのか教えてもらえますか?(Apache / 2.2.11(Win32)DAV / 2 mod_ssl / 2.2.11 OpenSSL / 0.9.8i PHP / 5.2.9 MySQLクライアントバージョン:5.0.51a)
mysqlデータベーステーブルは次のとおりです。
そしてPHPコード(dbクレデンシャルをプラグインするだけ):
よろしくお願いします。
コードのsession_set_save_handler行をコメントアウトすると、正常に機能します(増分します)。ただし、保存ハンドラーを使用する場合はそうではありません。
php - PHP関数session_set_save_handlerのwrite関数を使ったシリアライズはどのようなものですか?
session_set_save_handler() を利用します。それは正常に動作します。ただし、ユーザーのセッション データを変更する必要がある場合があります。write 関数に渡されるセッション データは、次のように内部的に作成されると単純に予想していました。
しかし、そうではありません。これらは、単純な PHP のシリアル化されたデータとはわずかに異なる形式を持っています。
session_set_save_handler() の書き込み関数の $_SESSION データをシリアル化するために内部的に使用されるシリアル化の種類を知っている人はいますか? またはさらに良いことに、このデータを操作するために使用できるシリアル化解除およびシリアル化関数があれば?
php - セッションを SQL に保存する (session_set_save_handler())
そのため、ログイン システムを作成しており、ユーザーは 24 分以上ログインする必要があります。そのため、セッションを DB に保存することにしました。
私はこの関数を使用しました:(私は自分のSQLの接続を確立しました-> sqlConnectionConfig.php)
sessions.phpファイル(php.netでこのコードを見つけました。):
admin/index.php と admin/admin.php ファイルの両方に同じ session_start() があります。
index.php にはフォームが含まれており、post を介してログイン データを admin.php に送信します。
問題は、24分後にログアウトすることです。しかし、理由はわかりません。私のデータベースはセッションを正常に保存しています。
php - データベースの session_set_save_handler クラスが機能しない
いくつかのチュートリアルに従った後、session_set_save_handler のクラスを使用して、セッション データを mysql データベースに保存しようとしています。
クラスファイルが含まれており、次のようにインスタンス化されています。
私のクラスファイルのコードは次のとおりです。
しかし、なぜそれが機能しないのかわかりません。
編集:動作しないということは、データベースに何も追加されていないことを意味します。
php - session_set_save_handler が機能していません
session_set_save_handler() を使用してセッションの保存を設定しようとしましたが、何が問題なのかわかりません。呼び出し可能な関数はすべてありますが、sth がうまくいかないため、ここにコードを投稿します。ところで私はWPで働いています。
したがって、何らかの理由で私の場合:
セッションハンドラーを設定できませんでした。助けてくれてありがとう!:D
php - session_set_save_handler と php 5.4.12 への書き込み
session_set_save_handler()
セッションをDBに保存するために使用しています。
PHP v.5.3 から v.5.4 に移行した後、write()
関数はまったく呼び出されません。関数を呼び出すときsession_write_close()
でも、スクリプトが終了するときでもありません (以前は正しく機能しており、コードに変更は加えられていません)。、および関数read()
は通常どおり呼び出されます。PHP 5.4 では、メカニズム
に関連するいくつかの変更があることを知っています。誰かが同様の問題を抱えているか、何が変更されたかを知っていますか?open()
close()
session_set_save_handler()
使用法:
コードの一部のデバッグについて申し訳ありません。