4

PdoSessionStorageを拡張するカスタムクラスがありますが、セッションから属性をキャッチして、データベースに独立したフィールドとして保存する方法がわかりません。

他の可能性は、カスタムPdoSessionStorageクラスのsessionWrite($ if、$ data)メソッドでセッションデータのシリアル化を解除することです。しかし、$ data文字列を逆シリアル化して、必要なデータのみを取得する方法がわかりません。

私はこれを試しました:

 unserialize($data);

そしてこれは私に次のエラーを投げます:

致命的なエラー:キャッチされない例外'ErrorException'とメッセージ'注意:unserialize()[function.unserialize]:/myserverの/myserver/myapp/src/app/myBundle/myCustomPdoSessionStorage.php行220'の82バイトのオフセット0でエラーが発生しました/myapp/vendor/symfony/src/Symfony/Component/HttpKernel/Debug/ErrorHandler.php:65スタックトレース:#0 [内部関数]:Symfony \ Component \ HttpKernel \ Debug \ ErrorHandler-> handle(8、'unserialize( )[...'、' / Applications / M ...'、220、Array)#1 /myserver/myapp/src/app/myBundle/myCustomPdoSessionStorage.php(220):unserialize(' _ symfony2 | a:3: {...')#2 [内部関数]:app / myBundle / myCustomPdoSessionStorage-> sessionWrite(' 72b823b39d316dd ...'、' _symfony2 | a:3:{...')#3{main}がスローされます/ myserver / myapp / vendor / symfony / src / Symfony / Component / HttpKernel / Debug/ErrorHandler。65行目のphp

誰か助けてくれませんか?

4

2 に答える 2

2

ここで間違った関数を使用しています。unserializeシリアル化された値用ですが、セッション用ではありません。この2つは近くにありますが、違います。

session_decode代わりに関数を探している可能性があります。スーパーグローバルにアンシリアル化される$_SESSIONので、ラップするように注意してください。

function unserialize_session($data) {
    $hasBuffer = isset($_SESSION);
    $hasBuffer && $buffer = $_SESSION;
    session_decode($data);
    $session = $_SESSION;
    $hasBuffer ? $_SESSION = $buffer : unset($_SESSION);
    return $session;
}

対応するものはsession_encode、同様に機能します。

参照:カスタムハンドラーでセッションデータのシリアル化を解除する方法

于 2012-10-17T09:13:54.530 に答える
1

見つけた!

私のCustomPdoSessionStorageクラスは、配列NativeSessionStorageを管理するを拡張し$_SESSIONます(読み取り、書き込みなど)。

したがって、クラスから使用$this->read('userId')してDBに保存できます。

だからどうもありがとう@hakre

于 2012-10-17T14:38:09.577 に答える