Codeigniter 3 - Access Session from Outside Codeigniter Installation

后端 未结 3 1360
半阙折子戏
半阙折子戏 2020-12-09 23:22

I can\'t seem to get session data passed from my codeigniter application back to a script in my includes folder. From what I\'ve read on other answers, I need to set my

相关标签:
3条回答
  • 2020-12-09 23:37

    Improving on @acupajoe's answer, you don't have to copy-paste the CI index.php. Instead change the include part into this:

    <?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();
        //...
    ?>
    

    Then change in index.php:

    $system_path = isset($temp_system_path) ? $temp_system_path : 'system';
    

    and

    $application_folder = isset($temp_application_folder) ? $temp_application_folder : 'application';
    
    0 讨论(0)
  • 2020-12-09 23:45

    I found this access codeigniter session values from external files it may help what you after.

    <?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');
    ?>
    
    0 讨论(0)
  • 2020-12-09 23:48

    The original answer from @wolfgang1983 Ben Swinburne combined with an answer here: from Atiqur Rahman Sumon

    You can include the index.php from any directory, however, you need to change the $system_path and $application_folder variables to match your relative location. Well that's great if you want to completely change your whole application's paths, but I didn't want to, so I just copied the index.php file into the directory I needed to include codeigniter with.

    ROOT /
         .. /application
         .. /system
         .. /includes
            .. /Events.php <- I need access from here
            .. /index.php <- Copied CI index with new paths
         .. /index.php
    

    In /includes/index.php:

    //$system_path = 'system';
    $system_path = '../system';
    
    //$application_folder = 'application';
    $application_folder = '../application';
    

    Now you can include codeigniter in your file with the:

    <?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');
    ?>
    

    If you refresh your page now, you would end up with the default controller loaded.

    So taking from Atiqur Rahman Sumon's answer, we can define a constant before load to tell the default controller we want to skip it's normal callstack.

    ob_start();
    define("REQUEST", "external"); <--
    include('index.php');
    ob_end_clean();
    

    And in your default_controller.php:

    function index()
    {
        if (REQUEST == "external") {
            return;
        } 
    
        //other code for normal requests.
    }
    
    0 讨论(0)
提交回复
热议问题