2010-07-12 6 views
9

में पार्स PHP सत्र मैंने हाल ही में node.js का उपयोग करके अपनी साइट को विस्तारित करने में प्रवेश किया है और प्राप्ति के लिए आया है मुझे अपने PHP सत्रों के लिए सत्र हैंडलर चाहिए। अब सबकुछ शांत और बेवकूफ था और node.js php सत्र पढ़ता है और php वाले लोगों के साथ अपने स्वयं के सत्र को प्रचारित कर सकता है। मैं डेटाबेस सत्र का उपयोग कर रहा हूं ताकि सत्र डेटा डेटाबेस में किसी फ़ील्ड में सहेजा जा सके।जावास्क्रिप्ट

हालांकि मुझे थोड़ी सी समस्या मिली है। मैं सत्र डेटा को node.js में पढ़ने का प्रयास कर रहा हूं और यह वास्तव में काफी अजीब स्ट्रिंग है। मैं करने के लिए नीचे प्रत्येक सत्र चर के strucutre प्राप्त करने में सक्षम किया गया है:

'field_name'|'type':'length':'value'; 

अब विशेष स्ट्रिंग पर मान फ़ील्ड लंबाई लापता जा सकता है (जब एक चर अशक्त है) अन्य तारों पर याद किया जा सकता है। प्रकार बी, एस, i से भी अधिक हो सकता है; यह एन (न्यूल) भी हो सकता है।

मैंने मूल रूप से जेएस के लिए एक विशाल अनुवादक के बारे में सोचा था लेकिन यह किसी भी तरह से ऐसा करने का एक बहुत ही गलत तरीका प्रतीत होता है।

क्या किसी ने यहां जेएस में पहले PHP सत्र चर निकालने का प्रयास किया है और क्या कोई ऐसी स्क्रिप्ट है जो मदद कर सकती है? शायद node.js में मेरे जीवन को बहुत आसान बनाने के लिए PHP पक्ष पर उपयोग करने वाली एक स्वरूपण चीज है?

संपादित करें: स्कीमा लगता है:

{ _id: { id: 'L:\u00c1\u009d\u008e\u00ad\u000e}<\u0002\u0000\u0000' } 
, session_id: 'a2clfnjhopv1srs5k5elgbfjv5' 
, user_id: 0 
, session_data:  'logged|b:0;uid|i:0;server_key|N;AUTH_TIER2|b:0;email|s:0:"";cheese|s:6:"cheese";' 
, active: 1 
, expires: 1278920567 
} 

यह एक उपयोगकर्ता सत्र के लिए मोंगो डाटाबेस रिकॉर्ड है। अनुवाद करने की आवश्यकता वाले क्षेत्र session_data है। स्टैक ओवरफ्लो प्रारूप के रूप में इसे चिपकाते समय कुछ प्रकार की स्वरूपण त्रुटि होती है, जब मैं कोशिश करता हूं और इसे किसी कारण से बना देता हूं।

मैं क्षेत्र से पहले JSONfy करने की कोशिश की, लेकिन यह यह प्रकार है खो दिया है और अशक्त प्रविष्टियों को पढ़ने नहीं था आदि तो मैं बंद कर दिया है कि

धन्यवाद,

+1

मैंने पहले Node.js साथ काम नहीं किया। [I json_encode'] (http://uk2.php.net/manual/en/function.json-encode.php) को node.js पर पास करने से पहले PHP से unserialized सत्र डेटा संभव होगा? – Gordon

+0

क्या आप स्कीमा के बजाय एक उदाहरण दिखा सकते हैं? कुछ दिखने पर कैसा लगता है? – galambalazs

+0

मैंने स्कीमा जोड़ा, हालांकि जैसा कि मैंने कहा था कि इसे चिपकाते समय कुछ प्रकार की त्रुटि थी और डेटा को कोड करने के लिए डेटा को स्वरूपित नहीं किया गया था :(गैलेम, जैसा कि मैंने संपादन में भी कहा है, मैंने जेएसओएन को आजमाया लेकिन ऐसा लगता है कि स्ट्रिंग सत्र डेटा पुनर्प्राप्त करना असंभव बना रहा है :(शायद उसमें कुछ ऐसा है, अगर मैं नोड फ़ील्ड करता हूं और सत्र डेटा को जेसन स्ट्रिंग में कॉपी करता हूं ... और फ़ील्ड के लिए डीजोनिफायर बना देता हूं .... हम्मम्म – Sammaye

उत्तर

5

मैं अपेक्षाकृत यकीन है कि पीएचपी serialize और unserialize कार्यों का उपयोग करता हूँ सत्र डेटा को संभालने के लिए।

PHP.JS में unserialize की एक जावास्क्रिप्ट कार्यान्वयन नहीं है, तो आप इसे यहाँ पा सकते हैं: बल पीएचपी बजाय JSON उपयोग करने के लिए:

उपयोग http://phpjs.org/functions/unserialize

+0

वह एक सेक्सी है स्क्रिप्ट इमा इसे आज़माएं। मैंने देखा कि उन्हें सीरियलाइज भी मिला है, इसलिए मैं उन्हें आज़माउंगा। क्या मुझे इन स्क्रिप्ट्स या केवल निर्भरताओं का उपयोग करने के लिए php.js की आवश्यकता है? – Sammaye

+0

मैंने PHP.JS का उपयोग नहीं किया है, लेकिन मैं लगता है कि आप सिर्फ तस्वीर कर सकते हैं के विशिष्ट कार्य जो आप चाहते हैं और उनके डीपी अगर –

+0

@ जनी मुझे यकीन नहीं है कि इसे धारावाहिक/unserialize के साथ संभाला जाता है लेकिन session_encode/session_decode – Gordon

3

बस जिस तरह से मैंने पाया जवाब देने के लिए JS_ के रूप में डेटा स्टोर करने के लिए session_set_save_handler के साथ नीचे दी गई कक्षा और PHP को अभी भी अपने सिस्टम का उपयोग करने दें। लिंक इस वर्ग के प्रत्येक स्क्रिप्ट आप सत्र का उपयोग की शुरुआत में इस समारोह का उपयोग कर: कक्षा उपयोग मेम्कैश यहाँ,, JSON जिसके परिणामस्वरूप वस्तु स्टोर करने के लिए Node.js पर एक मेम्कैश वस्तु का उपयोग करें और इस तरह से पुनः प्राप्त: http://php.net/manual/ru/function.session-set-save-handler.php

पी एस :

  • उपयोग के साथ "सत्र/आईडी" जहां आईडी कुंजी और सत्र सिर्फ स्ट्रिंग है memcached से कि वर्ण स्ट्रिंग एक महत्वपूर्ण लाने के लिए कुकीज़ से PHPSESSID मिल (नीचे वर्ग देखें)।

अब आपके पास केवल JSON memcache में होना चाहिए, इसलिए यह काम करने के लिए नोड.जेएस के साथ एक साधारण गेम बन रहा है।

पुनश्च: निश्चित रूप से आप के साथ काम कर सकते हैं/इस में सुधार, आप भी न केवल मेम्कैश (उदाहरण के लिए एक डाटाबेस)

<?php 
/** 
* This class is used to store session data with memcache, it store in json the session to be used more easily in Node.JS 
*/ 
class memcacheSessionHandler{ 
    private static $lifetime = 0; 
    private static $memcache = null; 

    public function __construct(){ 
      self::$memcache = new Memcache(); 
      self::$memcache->addServer('localhost', 11211); 
} 

    public function __destruct(){ 
      session_write_close(); 
      self::$memcache->close(); 
      self::$memcache = null; 
    } 

    public static function open(){ 
      self::$lifetime = ini_get('session.gc_maxlifetime'); 
      return true; 
    } 

    public static function read($id){ 
      $tmp = $_SESSION; 
      $_SESSION = json_decode(self::$memcache->get("sessions/{$id}"), true); 
      $new_data = session_encode(); 
      $_SESSION = $tmp; 
      return $new_data; 
    } 

    public static function write($id, $data){ 
      $tmp = $_SESSION; 
      session_decode($data); 
      $new_data = $_SESSION; 
      $_SESSION = $tmp; 
      return self::$memcache->set("sessions/{$id}", json_encode($new_data), 0, self::$lifetime); 
    } 

    public static function destroy($id){ 
      return self::$memcache->delete("sessions/{$id}"); 
    } 

    public static function gc(){ 
      return true; 
    } 

    public static function close(){ 
      return true; 
    } 
} 
?> 
5

यहाँ के साथ इस का उपयोग कर सकते एक session_decode phpjs की unserialize कार्य के आधार पर कार्य है : https://github.com/vianneyb/phpjs/blob/master/functions/var/session_decode.js

मेरे लिए काम करता है!

+0

धन्यवाद! यह मेरे लिए काम करता था जबकि php-unserialize नहीं था। –

2

मुझे एक ही समस्या थी। मुझे node.js के साथ एकीकृत करने की आवश्यकता है। ऐसा करने के लिए मैंने js-php-unserialize का उपयोग किया। उपयोग बहुत सरल है।

var PHPUnserialize = require('php-unserialize'); 
console.log(PHPUnserialize.unserializeSession(yourData)); 
उदाहरण के लिए यदि आप

var yourData = 'A|s:1:"B";userID|s:24:"53d620475e746b37648b4567";'; 

आप इस परिणाम मिल जाएगा:

{ 
    A: 'B', 
    userID: '53d620475e746b37648b4567' 
} 
संबंधित मुद्दे