2013-02-28 4 views
0

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

По этой причине я решил зашифровать имена файлов cookie, а также контента. Расшифровка содержимого этих файлов cookie для использования не вызывает особых проблем. Он отлично работает, как я хочу. Однако, для совместимости и динамики, я попытался назвать печенье динамически по их именам, используя подобный код, как это:

if(isset($_COOKIE[$encryption->decrypt('username')]){ ... } 

Но это, похоже, не работает. Ни сделал установка переменной с зашифрованным именем куки, как это:

$cookie_name = $encryption->decrypt('username'); 
if(isset($_COOKIE[$cookie_name]){ ... } 

То, как я в настоящее время с помощью этого скрипта (который работает, но кажется немного неаккуратно), как это:

if(isset($_COOKIE['Nm9yNCtoK1lTY2M5TnhKWnRvL0NjUT09']){ ... } 

Есть ли способ сделать это правильно, или я вынужден вызвать cookie с его предварительно зашифрованным именем, как я сейчас это делаю?

+0

Не храните регистрационную информацию в куки. Используйте '$ _SESSION' для хранения данных для входа (сеанс, в свою очередь, использует файлы cookie для * идентификации * сеанса, но это сильно отличается от того, чтобы содержать зашифрованную версию имени пользователя). – zzzzBov

+0

Использование '$ _SESSION' для автоматического входа в систему невозможно. Для этого мне действительно нужны куки. –

+0

Что вы подразумеваете под «автоматическими входами»? – zzzzBov

ответ

1

Как указано в комментарии выше, было бы разумным использовать сеанс.

В PHP сеансы могут быть «постоянными» ... AKA: не теряйтесь, когда пользователь закрывает браузер.

Отметьте этот ответ.

https://stackoverflow.com/a/9797962/1521230

EDIT:

Для "сброса" продолжительность сеанса печенья на каждый запрос, после session_start() на каждой странице, вы также хотите использовать session_regenerate_id (TRUE).

+0

drew010 говорит в своем ответе «Время жизни файла cookie устанавливается с момента начала сеанса, а не последующих запросов». Не означает ли это, что после начала сеанса и времени сеанса 7 дней, пользователь все равно должен будет повторно войти на веб-сайт, даже если на веб-сайт были посещены на протяжении всей жизни сессии? –

+0

В нем также говорится: «Если вы хотите продлить срок службы сеанса за 7 дней с текущего времени, см. Также session_regenerate_id()». Я добавил к своему ответу. –

+0

Вы правы, я, должно быть, пропустил мимо этой части. –

2

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

session_set_cookie_params ((14 * 24 * 60 * 60), '/', '.yoursite.com'); 
//Set the session for 14 days, on all paths, on all subdomains of yoursite.com 

Это переживет закрывающий браузера, и продолжить сеанс следующего время открытия.

Например, в login.php, вы могли бы это:

if ($remembermechecked) { 
session_set_cookie_params ((14 * 24 * 60 * 60), '/', '.yoursite.com');} 

Когда $ remembermechecked верно, то сессия будет длиться 14 дней.

+0

Но разве это не значит, что мне придется «подделывать» логин пользователя, чтобы сохранить сессию от тайм-аута, так как cookie сеанса не расширит его жизнь при последующих запросах таким образом? –

+0

Нет, на самом деле прямо сейчас вы подделываете логин пользователя с помощью файлов cookie. $ _SESSION - это правильный способ отслеживания логинов пользователей. В основном $ _SESSION ['userid'] будет идентификатором пользователя, входящего в систему. При выходе из системы вы в значительной степени просто мусор сессии, а затем они выходят из системы. – Pachonk

+0

Хорошо, спасибо за разъяснение. Надеюсь, вы не против, но так как вы и Андрей дали один и тот же ответ, и, поскольку у вас есть гораздо большая репутация, я собираюсь принять ответ Эндрю как правильный. –

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