2013-07-23 66 views
1

我存儲在PHP會話值到DynamoDB,下面的序列化結構從on_session_write得到()使用函數的session_set_save_handler(),如何解串PHP SESSION序列化值?

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序列化()和反序列化()函數,但它不工作。那麼,我該如何取消序列化這個值呢?

我需要根據$ _SESSION打印值的輸出格式。

+0

你用來做序列化的代碼是什麼......這看起來像是一個序列化調用,對其進行某種字符串操作。 – Orangepill

+1

由於某些原因,序列化的數據已損壞。這可能是由於在發佈時出現複製和粘貼錯誤或應用程序中的錯誤而導致的。很難說,不知道更多 – hek2mgl

+0

我現在用的是'的session_set_save_handler( 「on_session_start」, 「on_session_end」, \t \t \t 「on_session_read」, 「on_session_write」, \t \t \t 「on_session_destroy」, 「on_session_gc」);'功能和創建了一個函數on_session_write($ key,$ val){echo $ val;} –

回答

0

文檔說約session_set_save_handler

雖然數據看起來類似serialize()請注意它是在session.serialize_handler INI設置speficied不同的格式。

設定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陣列。

+0

太棒了!謝謝你的幫助! –

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

我已經嘗試了unserialize(),它不工作。 –