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

虽然数据看起来很相似,serialize()但请注意它是在session.serialize_handlerini 设置中指定的不同格式。

该设置session.serialize_handler默认为php,这意味着 PHP 正在使用内部session_encode()session_decode()函数。

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 回答