2011-12-09 16 views
7

बचाने हैंडलर $ डेटा एक सत्र के लिए लिखने समारोह में इस तरह एक प्रारूप में पारित हो जाता है:

परीक्षण | एक: 1: {s: 3: "foo" की: 3: "बार"; } सत्र | एक: 2: {s: 10: "isLoggedIn"; ख: 1; रों: 8: "clientid" की: 5: "12345 ";}

वहाँ एक रास्ता परिवर्तित करने के लिए है कि उचित सरणी में होगा जो:

array 
(
    'test' => array 
    (
     'foo' => 'bar' 
    ) 
    'session' => array 
    (
     'isLoggedIn' => true 
     'clientId' => '12345' 
    ) 
) 

मैं गुजर कि unserialize में करने की कोशिश की, लेकिन मैं की कोई त्रुटि मिलती है:

unserialize [function.unserialize](): त्रुटि पर 95 के 0 बाइट्स

ऑफसेट और यह सिर्फ झूठी वापसी।

+0

सत्र सहेजने वाला सत्र कैसा दिखता है? –

+0

कृपया स्ट्रिंग को व्यवस्थित करें, कुछ कस्टम फ़ंक्शन का उपयोग न करें। – NikiC

+0

यदि यह मूल स्ट्रिंग है, तो यह कोई आश्चर्य की बात नहीं है कि असुरक्षित विफल रहता है। यह विकृत है। विकृत इनपुट का उपयोग न करें। –

उत्तर

3
+0

'session_decode()' उस स्ट्रिंग पर 'झूठी' लौटाता है। –

+0

ठीक है, ठीक है जो मैं लिखने के लिए चाहता हूं, हालांकि एक सरणी को पढ़ने के लिए एक मान्य सत्र स्ट्रिंग में परिवर्तित करने का एक तरीका है (ध्यान दें कि मैं सत्र को बेहतर डीबग करने में सक्षम होने के लिए मोंगोडब में एक सरणी के रूप में संग्रहीत करना चाहता हूं सत्र डेटा अगर मुझे चाहिए) – ryanzec

+0

कुछ अच्छे उदाहरण हैं [यहां] (http://www.php.net/manual/en/function.session-encode.php) –

7
अन्य उत्तर के बारे में

की कोशिश करो। session_decode के लिए वर्णन "session_decode() सत्र में सत्र डेटा को डीकोड करता है, सत्र में संग्रहीत चर सेट करता है।" ऐसा लगता है जैसे आपको इसकी आवश्यकता नहीं होती है .. और स्ट्रिंग को पार्स करने के बाद यह हमेशा बूल लौटाएगा।

दूसरी ओर, यदि आपके द्वारा उदाहरण के रूप में प्रदान की गई स्ट्रिंग में एक गलती थी, तो "12345" के बाद की जगह (और यह एक गलती की तरह दिखती है क्योंकि इसके सामने आप देख सकते हैं कि निम्न मान एक स्ट्रिंग होना चाहिए लंबाई 5 के साथ) आप इस फ़ंक्शन का उपयोग कर सकते हैं:

function unserialize_session_data($serialized_string) 
{ 
    $variables = array(); 
    $a = preg_split("/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 

    for($i = 0; $i<count($a); $i = $i+2) 
    { 
     if(isset($a[$i+1])) 
     { 
       $variables[$a[$i]] = unserialize($a[$i+1]); 
     } 
    } 
    return($variables); 
} 
+0

यहां एक लिंक दिखा रहा है कि यह उदाहरण काम करता है: http://codepad.org/32C0pwyZ – mishu

+1

मुझे यकीन है कि यदि सत्र सत्र में पहले से पाइप वर्ण हैं तो यह काम नहीं करेगा। – cgTag

+1

इसके लिए आपको बहुत बहुत धन्यवाद। के लिए के रूप में मैं सत्र एन्कोड प्रक्रिया से पहले पाइप को प्रतिस्थापित करता हूं या यह ठीक से सहेजने में विफल रहता है। डीकोडिंग के बाद मैं प्रतिस्थापन को प्रतिस्थापित करता हूं। –

संबंधित मुद्दे