如何取消序列化PHP SESSION序列化值?

时间:2013-07-23 06:47:58

标签: php session

我将PHP SESSION值存储到DynamoDB中,以下序列化结构来自on_session_write()函数,使用session_set_save_handler(),

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打印值的输出格式。

2 个答案:

答案 0 :(得分:0)

$data = unserialize($value);
print_r($data);

答案 1 :(得分:0)

文档说明了session_set_save_handler

  

虽然数据看起来类似于serialize(),但请注意它是session.serialize_handler ini设置中指定的不同格式。

设置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数组。