Почему cookie не работает в CodeIgniter? - PullRequest
4 голосов
/ 17 марта 2012

Я использую эту функцию для добавления файлов cookie, и она отлично добавляется, как я вижу в настройках браузера.

function login($username,$password){

    $cookieUsername = array(
        'name'   => 'user',
        'value'  => md5($username),
        'expire' => time()+1000,
        'path'   => '/',
        'secure' => TRUE
    );

    $cookiePassword = array(
        'name'   => 'pass',
        'value'  => $password,
        'expire' => time()+1000,
        'path'   => '/',
        'secure' => TRUE
    );

    $this->input->set_cookie($cookieUsername);
    $this->input->set_cookie($cookiePassword);

}

Я не могу вернуть cookie из этой функции:

 echo $this->input->cookie('user');

Пожалуйста, помогите - как я могу получить cookie от CodeIgniter?

Ответы [ 11 ]

9 голосов
/ 18 марта 2012

Его проблема со встроенной функцией CI, которая пишет cookie.Что я изменил, так это теперь я устанавливаю cookie с функцией

setcookie($name,$value,$expire,$path); 

и возвращаю его обратно через

$this->input->cookie('user',TRUE); 

это чертовски хорошо!

8 голосов
/ 17 марта 2012

Вы не можете получить cookie на тот же HTTP-запрос.После того, как вы установили куки, он должен быть отправлен в браузер заголовком Set-Cookie.И вы не можете отправить заголовок, пока http транзакция не будет завершена.После этого браузер получит cookie и при следующем запросе отправит его на сервер с заголовком Cookie.

Из PHP.NET

Файлы cookie не будут видны до следующей загрузки страницы, для которой файл cookie должен быть виден.Чтобы проверить, был ли cookie успешно установлен, проверьте его на следующей странице загрузки, прежде чем истечет срок действия cookie.Время истечения устанавливается через параметр expire.

Таким образом, файл cookie будет доступен при следующей загрузке страницы.

3 голосов
/ 21 августа 2013

У меня была эта проблема, и я обнаружил, что Codeigniter требует значения срока действия, а не только имени и значения, как указано в документации. То есть

$cookie = array(
'name'  => 'logged',
'value'  => 1,
'expire' => '86500',
);

set_cookie($cookie);
2 голосов
/ 06 марта 2014

Переключение на PHP setcookie() вместо CI $this->input->set_cookie() у меня не сработало; файл cookie все еще не был доступен до следующего запроса. Это имеет смысл, потому что метод CI фактически генерирует setcookie(), поэтому они функционально эквивалентны. Тем не менее, я смог сразу заставить его работать, выполнив следующее:

//this is the original code, which is made available next request:
$this->input->set_cookie('foo', 'bar', 86500);
//this is what I added, to make the cookie available immediately:
$_COOKIE['foo'] = 'bar';

Надеюсь, это кому-нибудь поможет.

1 голос
/ 23 июля 2018

Проверьте ваш config.php для директивы cookie_secure.Должно быть ЛОЖНО для доменов, отличных от https.

Если домен не https и cookie_secure имеет значение TRUE в config.php, куки просто не будут установленыИзмените значение на ЛОЖЬ, и оно будет установлено как в http, так и в https.

1 голос
/ 29 декабря 2014

Это вызвано неправильной инициализацией функции set_cookie () о параметре $ expire, по умолчанию установленной в пустую строку, но по умолчанию она должна быть установлена ​​в 0, поскольку она представляет временную метку.Посмотрите на там исправление

Строка 342 на system / core / Input.php

https://github.com/diegomariani/CodeIgniter/commit/64ac9e711100605f41a3b37bc897a12063fed70b

1 голос
/ 17 марта 2012

Проверьте настройки файла cookie config.php.Если они установлены неправильно, куки не будут работать.Настройки по умолчанию работают для меня локально, используя ваш код

$config['cookie_prefix']    = '';
$config['cookie_domain']    = '';
$config['cookie_path']      = '/';

, вы должны зашифровать пароль, если вы собираетесь что-то шифровать.И вы не должны использовать MD5.Используйте встроенное шифрование CI ($this->encrypt->encode();), которое использует более безопасный алгоритм [не забудьте установить ключ шифрования в config.php].

0 голосов
/ 23 апреля 2018

Codeigniter в своем коде уже добавляет time() к истечению, поэтому вам не нужно добавлять time() в конфигурацию cookie.

Изменение:

 'expire' => time()+1000

Кому:

'expire' => 1000

Также используйте вспомогательные функции процедурного типа, такие как(set_cookie, get_cookie, delete_cookie..), поскольку они автоматически добавляют конфигурацию префикса cookie, в то время как с OOP ($this->input->set_cookie etc.) вам придется каждый раз вручную вводить конфигурацию префикса cookie.

0 голосов
/ 23 февраля 2018
public function cookie()
{
    $this->load->helper('cookie');

    $name   = 'user';
    $value  = 'pradip';
    $expire = time()+1000;
    $path  = '/';
    $secure = TRUE;

    setcookie($name,$value,$expire,$path); 

    $this->load->view('welcome_message');

}

вызов страницы просмотра, например, эхо $this->input->cookie('user');

output = pradip

0 голосов
/ 09 марта 2017

Сначала убедитесь, что вы используете cookie-помощник:

$this->load->helper('cookie');

И установите cookie следующим образом:

set_cookie($cookie_name, $value, $time);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...