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');
?>
Другие вопросы по тегам