У меня были некоторые проблемы с Сессиями / 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;
}