working userdata tiempo start not name example ejemplo cambiar php session codeigniter

php - userdata - acceder a valores de sesión codeigniter desde archivos externos



session name codeigniter (6)

En mi proyecto codeigniter he agregado el buscador KCK.

necesita algunos de los valores de sesión controlados por codeigniter. ¿Cómo puedo acceder a valores de sesión de CI desde archivos externos?


Si está buscando acceder a las sesiones (y están basadas en archivos) desde fuera de codeigniter y no desea cargar CI, puede hacer esto:

define(''ENVIRONMENT'', ''development''); $ds = DIRECTORY_SEPARATOR; define(''BASEPATH'', dirname(dirname(dirname(__FILE__)))); define(''APPPATH'', BASEPATH . $ds . ''application'' . $ds); define(''LIBBATH'', BASEPATH . "{$ds}system{$ds}libraries{$ds}Session{$ds}"); require_once LIBBATH . ''Session_driver.php''; require_once LIBBATH . "drivers{$ds}Session_files_driver.php"; require_once BASEPATH . "{$ds}system{$ds}core{$ds}Common.php"; $config = get_config(); if (empty($config[''sess_save_path''])) { $config[''sess_save_path''] = rtrim(ini_get(''session.save_path''), ''///'); } $config = array( ''cookie_lifetime'' => $config[''sess_expiration''], ''cookie_name'' => $config[''sess_cookie_name''], ''cookie_path'' => $config[''cookie_path''], ''cookie_domain'' => $config[''cookie_domain''], ''cookie_secure'' => $config[''cookie_secure''], ''expiration'' => $config[''sess_expiration''], ''match_ip'' => $config[''sess_match_ip''], ''save_path'' => $config[''sess_save_path''], ''_sid_regexp'' => ''[0-9a-v]{32}'', ); $class = new CI_Session_files_driver($config); if (is_php(''5.4'')) { session_set_save_handler($class, TRUE); } else { session_set_save_handler( array($class, ''open''), array($class, ''close''), array($class, ''read''), array($class, ''write''), array($class, ''destroy''), array($class, ''gc'') ); register_shutdown_function(''session_write_close''); } session_name($config[''cookie_name'']); session_start(); var_dump($_SESSION);


Bens responde con include (''index.php'') y obtener la instancia de CI no está mal, pero en mi situación, estas acciones son demasiado lentas.

Como tengo codeigniter configurado para usar archivos, hice esta solución que es un poco más rápida:

function CIsession() { $pathToSessionFiles = ''path/to/files/set/in/codeigniter/config/''; $h = md5($_SERVER[''REMOTE_ADDR'']); // $config[''sess_match_ip''] = TRUE; foreach( glob($pathToSessionFiles . ''*'' ) as $f ) { if( strpos($f, $h) ) { $s[ $f ] = filemtime($f); } } arsort($s); $s = array_keys($s); $s = reset($s); $s = file($s); $s = reset($s); $s = explode('';'', $s); foreach($s as $k => $v) { $s[$k] = str_getcsv($v, ":", ''"''); $s[$k][0] = substr(reset($s[$k]), 0, strpos(reset($s[$k]), ''|'')); $s[reset($s[$k])] = end($s[$k]); unset($s[$k]); } return $s; }

Espero que ayude a alguien!


Me vienen a la mente dos soluciones (que no implican decodificar las cookies de CI)

1) Cópialos en sesiones regulares de PHP, cuando asignes el CI interno:

$_SESSION[''name''] = $this->session->userdata(''name'');

Así que lo tienes disponible para cada archivo php en tu servidor; Creo que esta es la solución más rápida.

2) guarde las sesiones en la base de datos y conéctese para recuperar los valores.


<?php ob_start(); include(''index.php''); ob_end_clean(); $CI =& get_instance(); $CI->load->library(''session''); //if it''s not autoloaded in your CI setup echo $CI->session->userdata(''name''); ?>


Hola justo antes de obtener este código buscando en Google.

//path to your database.php file require_once("../frontend/config/database.php"); $cisess_cookie = $_COOKIE[''ci_session'']; $cisess_cookie = stripslashes($cisess_cookie); $cisess_cookie = unserialize($cisess_cookie); $cisess_session_id = $cisess_cookie[''session_id'']; $cisess_connect = mysql_connect($db[''default''][''hostname''], $db[''default''] [''username''], $db[''default''][''password'']); if (!$cisess_connect) { die("<div class=/"error/">" . mysql_error() . "</div>"); } $cisess_query = "SELECT user_data FROM ci_sessions WHERE session_id = ''$cisess_session_id''"; mysql_select_db($db[''default''][''database''], $cisess_connect); $cisess_result = mysql_query($cisess_query, $cisess_connect); if (!$cisess_result) { die("Invalid Query"); } $cisess_row = mysql_fetch_assoc($cisess_result); $cisess_data = unserialize($cisess_row[''user_data'']); // print all session values print_r($cisess_data);


Estoy usando una aplicación de inicio de sesión externa y quería usar datos de sesiones de CI. Encontré esta información en http://codeigniter.com/forums/viewthread/86380/ sobre cómo hacerlo sin ejecutar nada desde el marco de CI. Para mí, esto es ideal ya que evitará que las incompatibilidades causen problemas.

En caso de que tenga problemas para extraer la información del enlace:

  1. Si usa cookies de sesión ci, solo obtenga la cookie de sesión.
  2. Si usa la sesión ci con la base de datos, obtenga la cookie de sesión y busque una coincidencia en la base de datos en la tabla ci_session para verificar la sesión.
  3. Use datos y añada datos según sea necesario en la cookie (y en la base de datos si usa la sesión de la base de datos).