Я использую эту функцию для добавления 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?
Вы не можете получить cookie по одному и тому же запросу http. После того, как вы установите cookie, он должен быть отправлен в браузер заголовком Set-Cookie
. И вы не можете отправить заголовок, пока транзакция http не будет завершена. После этого браузер получит файл cookie, и в следующем браузере запроса он отправит его на сервер по заголовку Cookie
.
От PHP.NET
Куки-файлы не станут видимыми до следующей загрузки страницы, на которой должен отображаться файл cookie. Чтобы проверить, был ли файл cookie успешно установлен, проверьте, будет ли файл cookie на следующей странице загрузки до истечения срока действия файла cookie. Время истечения устанавливается через параметр expire.
Таким образом, cookie будет доступен при загрузке следующей страницы.
Его проблема с CI встроена в функцию, которая пишет cookie. Что я изменил, теперь я устанавливаю cookie whith
setcookie($name,$value,$expire,$path);
и вернуть его обратно
$this->input->cookie('user',TRUE);
это работа, черт возьми!
У меня возникла эта проблема и я обнаружил, что Codeigniter требует значения expiry, а не только имя и значение, указанные в документации. Т.е.
$cookie = array( 'name' => 'logged', 'value' => 1, 'expire' => '86500', ); set_cookie($cookie);
Проверьте настройки cookie config.php. Если они установлены неправильно, файлы cookie не будут работать. По умолчанию меня используют локально, используя ваш код.
$config['cookie_prefix'] = ''; $config['cookie_domain'] = ''; $config['cookie_path'] = '/';
Кроме того, вы должны зашифровать пароль, если вы собираетесь шифровать что-либо. И вы не должны использовать md5. Используйте встроенное шифрование CI ( $this->encrypt->encode();
), которое использует более безопасный алгоритм [не забудьте установить ключ шифрования в config.php].
Сначала убедитесь, что вы включили помощник cookie:
$this->load->helper('cookie');
И установите cookie следующим образом:
set_cookie($cookie_name, $value, $time);
есть ошибка в codeigniter: он не использует ваш cookie_prefix при чтении файла cookie (при написании файла cookie, он есть) см. /system/core/Input.php в функции cookie
Переход на 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';
Надежда помогает кому-то.
Это вызвано неправильной инициализацией функции set_cookie () параметра $ expire, заданной по умолчанию пустой строкой, но по умолчанию она должна быть установлена в 0, поскольку она содержит временную метку. Посмотрите на исправление
Строка 342 в системе / ядре / Input.php
https://github.com/diegomariani/CodeIgniter/commit/64ac9e711100605f41a3b37bc897a12063fed70b