2012-03-16 2 views
1

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

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); 

} 

Я не могу получить обратно печенье из этой функции:

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

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

+0

Пожалуйста, помните, мой сервер является локальным: 8000 – danny

+0

Вы спасаете хэш имени пользователя. Но не пароль! –

+0

Какова ваша версия CI? –

ответ

7

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

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

функции и получить его обратно через

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

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

+0

У меня была такая же проблема, как и у ОП, и эта рекомендация исправила ее при первой попытке для меня. Спасибо Дэнни! – brianrhea

8

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

От PHP.net

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

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

+0

NB : У меня не было проблем с получением файла cookie на той же загрузке страницы, где cookie был установлен с помощью Chrome, но у него была проблема с Safari. – stormdrain

+0

Проверьте, правильно ли установлено время вашего сервера? –

+0

Ну, нет, но это локальный apache2 на моем Mac, поэтому он используется в то же время, что и браузер. Тем не менее, он * не ведет себя таким образом ... Он * делает * берет обновление страницы, чтобы показать cookie - даже в Chrome. :) – stormdrain

1

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

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

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

0

есть ошибка в CodeIgniter: он не использует свой cookie_prefix при чтении печенья (при записи куки, это) см /system/core/Input.php в функции куки

2

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

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

set_cookie($cookie); 
0

Переключение SetCookie РНР() вместо $ this->> 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'; 

Надеюсь, что кто-то поможет.

0

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

линии 342 на системы/ядра/Input.php

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

0

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

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

и установить куки, как это:

set_cookie($cookie_name, $value, $time); 
0
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');

выхода = Прадип

Смежные вопросы