Lea los datos de la sesión del archivo de almacenamiento de la sesión

Enfrentando el problema con la función PHP unserialize() como tituló está lanzando un error.

 unserialize() [function.unserialize]: Error at offset 0 of 1781 bytes 

También probé el session_decode() que devuelve bool(false)

magic_quotes_gpc está Off .

Bien, estoy leyendo el contenido del archivo que está serializado. El contenido del archivo se ve a continuación.

core | a: 3: {s: 23: “_ session_validator_data”; a: 4: {s: 11: “remote_addr”; s: 15: “117.241.113.248”; s: 8: “http_via”; s: 0: “”; s: 20: “http_x_forwarded_for”; s: 0: “”; s: 15: “http_user_agent”; s: 90: “Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US; rv: 1.9 .2.13) Gecko / 20101203 Firefox / 3.6.13 “;} s: 13:” session_hosts “; a: 1: {s: 12:” “; b: 1;} s: 8:” mensajes “; O: 34 : “Mage_Core_Model_Message_Collection”: 2: {s: 12: “^ @ * ^ @ _ messages”; a: 0: {} s: 20: “^ @ * ^ @ _ lastAddedMessage”; N;}} cliente | a: 3: {s: 23: “_ session_validator_data”; a: 4: {s: 11: “remote_addr”; s: 15: “117.241.113.248”; s: 8: “http_via”; s: 0: “”; s: 20 : “http_x_forwarded_for”; s: 0: “”; s: 15: “http_user_agent”; s: 90: “Mozilla / 5.0 (Windows; U; Windows NT 5.1; es-US; rv: 1.9.2.13) Gecko / 20101203 Firefox / 3.6.13 “;} s: 13:” session_hosts “; a: 1: {s: 12:” “; b: 1;} s: 19:” wishlist_item_count “; i: 0;} catalog | a: 3: {s: 23: “_ session_validator_data”; a: 4: {s: 11: “remote_addr”; s: 15: “117.241.113.248”; s: 8: “http_via”; s: 0: “”; s : 20: “http_x_forwarded_for”; s: 0: “”; s: 15: “http_user_agent”; s: 90: “Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US; rv: 1. 9.2.13) Gecko / 20101203 Firefox / 3.6.13 “;} s: 13:” session_hosts “; a: 1: {s: 12:” “; b: 1;} s: 8:” mensajes “; O: 34: “Mage_Core_Model_Message_Collection”: 2: {s: 12: “^ @ * ^ @ _ messages”; a: 0: {} s: 20: “^ @ * ^ @ _ lastAddedMessage”; N;}} checkout | a: 3 : {s: 23: “_ session_validator_data”; a: 4: {s: 11: “remote_addr”; s: 15: “117.241.113.248”; s: 8: “http_via”; s: 0: “”; s: 20: “http_x_forwarded_for”; s: 0: “”; s: 15: “http_user_agent”; s: 90: “Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US; rv: 1.9.2.13) Gecko / 20101203 Firefox / 3.6.13 “;} s: 13:” session_hosts “; a: 1: {s: 12:” “; b: 1;} s: 8:” mensajes “; O: 34: “Mage_Core_Model_Message_Collection”: 2: {s: 12: “^ @ * ^ @ _ messages”; a: 0: {} s: 20: “^ @ * ^ @ _ lastAddedMessage”; N;}}

mi código PHP está debajo

 $file='/var/www/html/products/var/session/sess_0ehb7ek0hmunqo3kq70t0t6mb0'; $contents=file_get_contents($file); $data = unserialize($contents); var_dump($data); 

Ya probé las stripslashes() antes de stripslashes() datos. No estoy seguro de dónde está el problema en los datos. No puedo cambiar el mecanismo de almacenamiento de datos en un archivo porque Magento se encarga de gestionar la sesión en el nivel de archivo.

Si desea decodificar datos de sesión, use session_decode (consulte el manual ). unserialize solo decodifica variables individuales, no datos de sesión.

Puedes hacer algo como:

 $file = '/var/www/html/products/var/session/sess_ciktos8icvk11grtpkj3u610o3'; $contents = file_get_contents($file); session_start(); session_decode($contents); print_r($_SESSION); 

Eso no es información serializada de PHP, eso es información de sesión de PHP.

Los datos de sesión PHP usan el formato serializado internamente, pero no son datos serializados.

Lo único que puede leer de manera segura y sana los datos de la sesión es el código de sesión de PHP. Algunas veces es posible leerlo usando una expresión regular y alguna edición creativa, pero no puede confiar en esos métodos.

Si necesita datos de la sesión de un usuario, su mejor opción es escribir un contenedor de sesión personalizado y dejar que haga el trabajo cuando los datos cambian en lugar de tratar de trabajar con los datos después del hecho.

(No estoy hablando de un código de escritura de sesión personalizado, estoy hablando de una clase que $_SESSION lugar de usar $_SESSION directamente).

Use esta clase:

  < ?php class Session { public static function unserialize($session_data) { $method = ini_get("session.serialize_handler"); switch ($method) { case "php": return self::unserialize_php($session_data); break; case "php_binary": return self::unserialize_phpbinary($session_data); break; default: throw new Exception("Unsupported session.serialize_handler: " . $method . ". Supported: php, php_binary"); } } private static function unserialize_php($session_data) { $return_data = array(); $offset = 0; while ($offset < strlen($session_data)) { if (!strstr(substr($session_data, $offset), "|")) { throw new Exception("invalid data, remaining: " . substr($session_data, $offset)); } $pos = strpos($session_data, "|", $offset); $num = $pos - $offset; $varname = substr($session_data, $offset, $num); $offset += $num + 1; $data = unserialize(substr($session_data, $offset)); $return_data[$varname] = $data; $offset += strlen(serialize($data)); } return $return_data; } private static function unserialize_phpbinary($session_data) { $return_data = array(); $offset = 0; while ($offset < strlen($session_data)) { $num = ord($session_data[$offset]); $offset += 1; $varname = substr($session_data, $offset, $num); $offset += $num; $data = unserialize(substr($session_data, $offset)); $return_data[$varname] = $data; $offset += strlen(serialize($data)); } return $return_data; } } ?> 

Uso:

 < ?php Session::unserialize(file_get_contents($sessionSavePath."/".$sessionFileName); ?> 

Eso es trabajo!

Lo siguiente puede ser una forma de leer los datos de sesión del archivo de sesión

 //$file='/var/www/html/products/var/session/sess_ciktos8icvk11grtpkj3u610o3'; $sSessId = 'ciktos8icvk11grtpkj3u610o3'; session_id($sSessId); session_start(); print_r($_SESSION); 

mira, esto podría hacerte clic en algo

 function read($filename) { session_save_path("/tmp/tst"); session_start(); echo $sCurrentFile = "/tmp/tst/sess_".session_id(); $sFileToRead = $filename; if( !file_exists($sFileToRead) || !$sessionData=(string)@file_get_contents($sFileToRead) ) { echo "file does not exist"; } $fh = fopen($sCurrentFile, 'w') or die("can't open file"); fwrite($fh, $sessionData); fclose($fh); $_SESSION["mytest"] = 444; print_r($_SESSION); } 

intente Leer datos de sesión desde el archivo de sesión