В моем проекте codeigniter я добавил KCK finder.
он нуждается в некоторых значениях сеанса, которые контролируются с помощью codeigniter. как я могу получить доступ к значениям сеанса CI из внешних файлов?
<?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'); ?>
Если вы хотите получить доступ к сеансам (и они основаны на файлах) вне кода и не хотите загружать CI, вы можете сделать это:
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);
На ум приходят два решения (которые не требуют декодирования файлов cookie CI)
1) Скопируйте их на обычные сеансы PHP, когда вы назначаете внутренний CI:
$_SESSION['name'] = $this->session->userdata('name');
Таким образом, у вас есть доступ к каждому файлу php на вашем сервере; Я считаю, что это самое быстрое решение.
2) сохраните сеансы в базе данных и подключитесь к нему, чтобы получить значения.
Привет, только до того, как я получил этот код с помощью googling.
//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);
Я использую внешнее приложение для входа и хотел использовать данные из сеансов CI. Я нашел эту информацию http://codeigniter.com/forums/viewthread/86380/ о том, как это сделать, не используя ничего из инфраструктуры CI. Для меня это идеальное решение, поскольку оно будет препятствовать возникновению каких-либо несовместимостей.
Если у вас есть проблемы с извлечением информации из ссылки:
Ответ Bens with include ('index.php') и получение экземпляра CI неплохо, но в моей ситуации эти действия происходят слишком медленно.
Поскольку у меня есть codeigniter, чтобы использовать файлы, я сделал это решение, которое немного быстрее:
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; }
не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; }
Надеюсь, это поможет кому-то!