CodeIgniter не может использовать данные сеанса после redirect () - PullRequest
1 голос
/ 29 мая 2019

Я пытался создать приложение, но столкнулся с проблемой с данными сеанса. Поэтому я скачал новый свежий проект CodeIgniter и попытался работать с сеансом, но все равно не получилось. Вот что я сделал:

application / config / autoload.php:

$autoload['libraries'] = array('session');

$autoload['helper'] = array('url');

приложение / Config / config.php:

$config['sess_save_path'] = 'D:\Projects\CodeIgnter-fresh\application\cache\session';

После этого я создал контроллер с именем User.php

User.php

<?php

class User extends CI_Controller {

    public function index() {
        $this->session->set_userdata('somedata', 'somevalue');
        redirect('user/dashboard', 'refresh');
    }

    public function dashboard() {
        var_dump($this->session->userdata);
    }
}

Контроллер содержит два простых метода. Метод index устанавливает некоторые пользовательские данные, после чего перенаправляет их на другой метод, который выводит пользовательские данные. К сожалению вот что я вижу:
enter image description here
Кажется, единственные данные, которые я могу видеть, - это некоторые данные CodeIgniter, но наверняка данные, которые я пытаюсь установить, пропали. Интересно, что я заметил , что в папке application / cache / session я могу видеть некоторые файлы с моими данными в ней. Так что я думаю, это должно быть проблема с разрешением, но я не могу понять это Какие-либо предложения?

Я использую:
ОС: Windows 10 Education
Версия PHP: 7.2.11
Версия CodeIgniter: 3.1.10

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Я вижу 2 вопроса в этом вопросе:

  1. не может записать информацию о сеансе на диск с помощью CI файловый драйвер
    и
  2. не удалось получить информацию о сеансе

1. записать информацию о сеансе на диск

config.php в строке 344 говорит:

sess_save_path '

Место для сохранения сеансов, в зависимости от драйвера.

Для драйвера 'files' это путь к каталогу, доступному для записи. ВНИМАНИЕ: Поддерживаются только абсолютные пути!

ВАЖНО: ТРЕБУЕТСЯ указать правильный путь сохранения!

Поэтому вам нужно установить его в значение false (ничего не сохраняется) или использовать абсолютный путь. Чтобы сделать эту работу одинаковой для разработки и производства , вы можете использовать массив PHP $_SERVER и использовать его в своем config.php, например:

$config['sess_save_path'] = $_SERVER['DOCUMENT_ROOT'].'/application/cache/session/';

наконец, вам нужно убедиться, что указанный выше каталог доступен для записи, но только у вас есть доступ к этому каталогу (на рабочем сервере).

P.S .: вы видите, что в $ _SERVER, используя эту строку:

<?php echo'<pre>';print_r($_SERVER); ?>

2. получить информацию о сеансе

  • убедитесь, что вы не уничтожили сеанс в предыдущей функции
  • помните об изменении $ config ['cookie_domain'], $ config ['cookie_path'], $ config ['cookie_secure'] может влиять на сеансы:

этот параметр работает в моей настройке:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = $_SERVER['DOCUMENT_ROOT'].'/application/cache/session/';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

$config['cookie_prefix']    = '';
$config['cookie_domain']    = '';
$config['cookie_path']      = '/';
$config['cookie_secure']    = FALSE;
$config['cookie_httponly']  = FALSE;

Если ничего из этого не работает, вы все равно можете попробовать переопределить автозагрузку, поместив этот конструктор в ваш User контроллер:

public function __construct(){
  parent::__construct();
  $this->load->library('session');
}
0 голосов
/ 29 мая 2019

Установите для драйвера значение «files» в конфигурации:

$config['sess_driver'] = 'files';

Дополнительная информация здесь Руководство пользователя по сеансу Codeigniter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...