2

PHP SESSION 値を DynamoDB に保存しました。次のシリアル化された構造は、session_set_save_handler() を使用して on_session_write() 関数から取得されます。

id|s:26:"rj4n98n6371vpgj8h5s10lmoh2";matt|N;SmartyValidate|a:1:{s:7:"default";a:4:{s:16:"registered_funcs";a:2:{s:8:"criteria";a:0:{}s:9:"transform";a:0:{}}s:10:"validators";a:0:{}s:8:"is_error";b:0;s:7:"is_init";b:1;}}language_id|i:1;language|s:3:"eng";

PHP の serialize() および unserialize() 関数を試しましたが、機能しません。では、どうすればこの値のシリアル化を解除できますか?

$_SESSION の出力値に応じた出力形式が必要です。

4

2 に答える 2

2

ドキュメントには次のように書かれていsession_set_save_handlerます:

データは似ていますが、 ini 設定serialize()で指定されている別の形式であることに注意してください。session.serialize_handler

設定のsession.serialize_handlerデフォルトはphpです。これは、PHP が internalsession_encode()およびsession_decode()functions を使用していることを意味します。

session_decode()で提供されるシリアル化されたセッション データをデコードし、その結果をスーパーグローバルに$data取り込みます。$_SESSION

例:

<?php
session_start();
$str = 'id|s:26:"rj4n98n6371vpgj8h5s10lmoh2";matt|N;SmartyValidate|a:1:{s:7:"default";a:4:{s:16:"registered_funcs";a:2:{s:8:"criteria";a:0:{}s:9:"transform";a:0:{}}s:10:"validators";a:0:{}s:8:"is_error";b:0;s:7:"is_init";b:1;}}language_id|i:1;language|s:3:"eng";';
if (session_decode($str)) {
  print_r($_SESSION);
} else {
  die ("failed to decode session");
}

注:でダミー セッションを初期化する必要がありますsession_start()。それ以外の場合は失敗し、配列session_decode()にデータが取り込まれません。$_SESSION

于 2013-07-23T07:24:32.227 に答える
0
$data = unserialize($value);
print_r($data);
于 2013-07-23T06:52:37.207 に答える