我将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打印值的输出格式。
答案 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
数组。