Parse PHP Session in Javascript

前端 未结 4 786
太阳男子
太阳男子 2021-02-08 12:07

I have recently gone into extending my site using node.js and have come to realisation I need a session handler for my PHP sessions. Now everything was cool and dandy and node.j

4条回答
  •  有刺的猬
    2021-02-08 12:50

    Just to reply with the way I've found: force PHP to use JSON instead :

    Use the class below, with session_set_save_handler to store data as JSON and let PHP still using his own system. Link this class using this function at the beginning of each script you use session : http://php.net/manual/ru/function.session-set-save-handler.php

    PS : here the class use memcache to store JSON resulting object, on Node.JS, use a memcache object, and retrieve like this :

    • get the PHPSESSID from cookies
    • use that characters string to bring a key from memcached with "sessions/id" where id is the key and session just the string (see class below).

    Now you should have only JSON in memcache, so it's becoming a simple game with Node.JS to work with.

    PS : of course you can work with/improve this, you can also use this not only with memcache (a db for example)

    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;
        }
    }
    ?>
    

提交回复
热议问题