Codeigniter 3 - Сеанс доступа из внешней установки Codeigniter
Кажется, я не могу передать данные сеанса из моего приложения codeigniter обратно в скрипт в моей папке include. Из того, что я прочитал на других ответах, мне нужно установить мой session_id()
чтобы иметь возможность присоединиться к сеансу с session_start()
,
ROOT /
.. /application
.. /system
.. /includes
.. /Events.php <- I need access from here
Теоретически приведенный ниже код должен работать, по крайней мере, в соответствии с другими ответами, потому что новая библиотека сеансов CI переходит к собственным сеансам.
session_id($_COOKIE['ci_session']);
session_start();
var_dump($_SESSION); // returns null
Я неправильно понимаю сеансы?
3 ответа
Оригинальный ответ от @wolfgang1983 Бен Суинберн в сочетании с ответом здесь: от Atiqur Rahman Sumon
Вы можете включить index.php
из любого каталога, однако, вам нужно изменить $system_path
а также $application_folder
переменные, чтобы соответствовать вашему относительному местоположению. Что ж, замечательно, если вы хотите полностью изменить пути всего приложения, но я не хотел, поэтому я просто скопировал index.php
файл в каталог мне нужно было включить codeigniter с.
ROOT /
.. /application
.. /system
.. /includes
.. /Events.php <- I need access from here
.. /index.php <- Copied CI index with new paths
.. /index.php
В /includes/index.php
:
//$system_path = 'system';
$system_path = '../system';
//$application_folder = 'application';
$application_folder = '../application';
Теперь вы можете включить codeigniter в ваш файл с помощью:
<?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');
?>
Если вы обновите страницу сейчас, вы получите загруженный контроллер по умолчанию.
Таким образом, исходя из ответа Atiqur Rahman Sumon, мы можем определить константу перед загрузкой, чтобы указать контроллеру по умолчанию, что мы хотим пропустить его нормальный стек вызовов.
ob_start();
define("REQUEST", "external"); <--
include('index.php');
ob_end_clean();
И в твоем default_controller.php
:
function index()
{
if (REQUEST == "external") {
return;
}
//other code for normal requests.
}
Улучшение ответа @acupajoe, вам не нужно копировать и вставлять CI index.php
, Вместо этого измените include
часть в этом:
<?php
ob_start();
define("REQUEST", "external");
$temp_system_path = 'path/to/system/folder/from/external/file';
$temp_application_folder = 'path/to/application/folder/from/external/file';
include('path/to/index.php/file/from/external/file');
ob_end_clean();
$CI =& get_instance();
//...
?>
Затем изменить в index.php
:
$system_path = isset($temp_system_path) ? $temp_system_path : 'system';
а также
$application_folder = isset($temp_application_folder) ? $temp_application_folder : 'application';
Я нашел это значение сеанса codeigniter доступа из внешних файлов, это может помочь, что вы после.
<?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');
?>