5

sessionHandlerInterfaceセッションをデータベースに保存していました。すべて正常に動作します。しかし、データベースからシリアル化されたすべてのデータを次のように取得したい

SELECT data FROM session;

それらを出力するときにデータをデコードしてもらいたい。問題を引き起こしている配列自体をsession_decode()操作しているを使用してみました。$_SESSIONシリアル化されたデータを取得し、デコードされたデータを返したいだけです。

dataこれは、列のデータベースに保存されたサンプル セッション データです。

fb_422782977793963_code|s:216:"AQAVKa4Q8sOuioW75V9Ls-cDUEizgJDX5ZkRVLArDlroFvvhasdwKvbyzKEwiMVrN7nc5ghMaw0W67jQu5kt_sc_Edm9sABzB5PakdkUpXr52AViTOltPfPBQHM9T-JoGOQ4gasdbssC8Xt93NKFvdV7XRZ7ZYGZqIsu5SFpfFBHK_hNGDdRVbnbe_xUZVP9WI4h0jDy";fb_422782977793963_access_token|s:111:"AAAGAhasdaAKL7hAvXRv6FHUj1Tk24r7j4NqDwWWUzmXDZA2Igsb1pHjuP4jbBRNKfeYzutm0MFmgxuKPg1n0NEbvZAXM3bwoNZBiZCgZDZD";fb_422782977793963_user_id|s:15:"100004835469598";picture|s:61:"http://m-static.ak .fbcdn.net/rsrc.php/v2/yo/r/sdIqmHJn-SK.gif";

通常のセッション処理で問題なく動作し、セッションをデータベースに読み書きします。

アクティブなセッションのすべてのデータを取得したい。SELECT data FROM セッションを使用する場合。上記のセッションデータ(エンコードされた)を返します。デコードされたデータを取得したいです。

4

1 に答える 1

4

PHPserializeおよびunserialize関数を使用して、セッションデータをシリアル化および非シリアル化することはできません。(デフォルトで-そしてデフォルトでのみ)シリアル化が似ているように見える場合でも、単一の変数の内容のみを考慮するこれら2つの関数には重要な違いがあります。

これらの[セッション]は、変数名を持つシリアル化された値のリストです。

from: シリアル化されたREADME

したがって、データベースから返されるsession_unserialize文字列を(たとえば、経由で)デコードできる独自の関数を作成する必要があります。session_decodeこれにはすべてが必要であることに注意してください。たとえば、セッションにシリアル化されたオブジェクトが含まれている場合は、クラス定義をロードする必要があります。

例示的なsession_unserialize関数は次のようになります(採用元: セッション関連の回答):

function unserialize_session($data) {
    $hasBuffer = isset($_SESSION);
    $hasBuffer && $buffer = $_SESSION;
    session_decode($data);
    $session = $_SESSION;
    $hasBuffer ? $_SESSION = $buffer : unset($_SESSION);
    return $session;
}
于 2012-12-14T11:28:17.820 に答える