Как не восстановить новый файл cookie при каждой загрузке страницы в CodeIgniter? - PullRequest
0 голосов
/ 26 мая 2018

У меня были некоторые проблемы с Сессиями / Cookies в CodeIgniter.После более подробного изучения Inspect Element я выяснил, что мой код создает новый файл cookie каждый раз, когда я загружаю страницу на свой веб-сайт.Я не могу понять, как этого не происходит / назначить пользователю только один постоянный файл cookie на сеанс.

Настройки моего сеанса таковы:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_save_path'] = BASEPATH . 'Writable/sessions/';
$config['sess_match_ip'] = True;
$config['sess_time_to_update'] = 120; 
$config['sess_regenerate_destroy'] = False;
$config['cookie_prefix'] = '';
$config['cookie_domain'] = '.myapp.com';
$config['cookie_path'] = '/';
$config['cookie_secure'] = False;
$config['cookie_httponly'] = False;

Кроме тогоЯ дал папке / Writable / session / правильные права доступа и права собственности.Я думаю, что моя конфигурация в порядке (файлы cookie отображаются в браузере / кажется, что они работают).

Мой вопрос: как мне сделать так, чтобы файл cookie соответствовал индивидуальному пользователю в первую очередь?входить в систему вместо создания нового файла cookie с отсутствующими данными при каждой загрузке страницы?Мой класс контроллера (где я инициализирую coookie) выглядит следующим образом:

BaseController.php

class BaseController extends \CodeIgniter\Controller {
// Class vars set to null
    public function __construct($request, $response, $logger = null) {
        parent::__construct($request, $response, $logger);
        error_reporting(E_ALL);
        ini_set('display_errors', 1);

        $this->db = \Config\Services::db();

        $this->RefTypes = new RefTypesModel($this);

        $this->url = new \CodeIgniter\HTTP\URI();

        // This is the problematic code
        if ($this->session == null) {
             $this->session = \Config\Services::session();
             $this->session->start();   
    }
        $this->init();
    }
}

Затем в других моих контроллерах у меня есть код, который использует сеанснапример:

MyController.php

class MyController extends BaseController {
    public function login() {
        // Set data in cookie and then redirect to new page
        $this->session->set('userId', $userId);
        return redirect()->to('/dashboard');
}
    public function dashboard() {
        // This is where I run into a problem...
        $test = $this->session->get('userId');  //Returns null
        echo "<script type=\"text/javascript\">alert('$test');</script>";

}
}

По сути, поскольку PHP является языком сценариев, каждый раз, когда я загружаю новую страницу, код в BaseController.phpзапустить который запускает код, чтобы снова инициализировать сеанс.Я также пытался использовать драйвер базы данных, и это не решило проблему.Кто-нибудь знает какие-либо обходные пути для этого или любого другого способа иметь «общий» экземпляр моей переменной сеанса, чтобы он был независим от моих контроллеров?Спасибо!!Любая помощь очень ценится:)

РЕДАКТИРОВАТЬ: мой /application/config/config.php, кажется, не имеет никакого эффекта.Я думаю, что это потому, что я на CI4 вместо CI3.Я прямо сейчас устанавливаю свои настройки сеанса.Код для этого выглядит следующим образом:

/ system / Session / Session.php :

public function __construct(\SessionHandlerInterface $driver, $config) {
        $this->driver = $driver;

        $config->sessionSavePath = BASEPATH . 'Writable/sessions/';
        $config->sessionMatchIP = True;
        $config->cookieDomain = '.autoloapp.com';

        $this->sessionDriverName = $config->sessionDriver;
        $this->sessionCookieName = $config->sessionCookieName;
        $this->sessionExpiration = $config->sessionExpiration;
        $this->sessionSavePath = $config->sessionSavePath;
        $this->sessionMatchIP = $config->sessionMatchIP;
        $this->sessionTimeToUpdate = $config->sessionTimeToUpdate;
        $this->sessionRegenerateDestroy = $config->sessionRegenerateDestroy;

        $this->cookieDomain = $config->cookieDomain;
        $this->cookiePath = $config->cookiePath;
        $this->cookieSecure = $config->cookieSecure;
}

1 Ответ

0 голосов
/ 27 мая 2018

Мне удалось это исправить (наконец-то), но я заменил все файлы / application и все файлы / shared / config файлами из стандартной структуры CI4.Я использовал файлы CI3 (привет перед разработчиком), и обновление этих файлов конфигурации правильными значениями устранило проблему.Я также удалил код в BaseController.php, который создавал сеанс.Спасибо @DFriend за помощь в выяснении проблемы!

...