2012-06-22 3 views
9

Какой лучший способ сохранить пользователя на PHP-сайте, пока он не закроет свой браузер?PHP session или cookie

Первый и самый популярный способ - с $_SESSION. Второй должен пройти ноль в качестве третьего аргумента функции setcookie: setcookie(name, value, 0, domain);

+5

Session фактически использует куки для хранения SID –

+1

@AlvinWong Я знаю, но мой вопрос, что лучше использовать в PHP – treng

ответ

18

В PHP сессии фактически сохраняет SID с помощью куки (конечно, вы можете использовать другие способы настройки SID, если вы хотите), то не было бы большой разницы, когда их просто использовать.

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

Итак, если данные продолжаются только для этого сеанса, я предпочитаю использовать сеанс.

Замечание: если вы используете несколько серверов для балансировки нагрузки, вы должны быть предельно осторожны, поскольку данные сеанса хранятся локально на сервере по умолчанию. Возможно совместное использование данных сеанса на нескольких серверах, но это beyond the scope of this question. Кроме того, вы можете хранить данные в базе данных.

+2

вы все равно можете использовать сеансы на нескольких серверах env. путем хранения сеанса в memcache (http://php.net/manual/en/memcached.sessions.php) – Rizon

3

Сессия предназначена для этой цели, поэтому я бы пошел с этим.

3

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

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

http://php.about.com/od/learnphp/qt/session_cookie.htm

1

Я бы использовал $ _SESSION как его проще. : P В любом случае, как указано выше, решите свой случай. Если вам нужно, чтобы пользователь вошел в систему некоторое время, даже после закрытия браузера, используйте cookie, но правильно. Это может быть угрозой безопасности для вас! иначе используйте сеанс.

4

Предлагаю вам перейти на сеансы PHP. Это просто, и вам не нужно иметь дело с куки-файлами по своему усмотрению.

Ниже приведен код, позволяющий по-настоящему уничтожить сеанс, скопированный с example, указанный в руководстве по PHP.

// Initialize the session. 
// If you are using session_name("something"), don't forget it now! 
session_start(); 

// Unset all of the session variables. 
$_SESSION = array(); 

// If it's desired to kill the session, also delete the session cookie. 
// Note: This will destroy the session, and not just the session data! 
if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', time() - 42000, 
     $params["path"], $params["domain"], 
     $params["secure"], $params["httponly"] 
    ); 
} 

// Finally, destroy the session. 
session_destroy(); 

О ваш вопрос:

Что лучше использовать, чтобы пользователь вошел, пока он не закроет свой браузер?

Существует нет отказоустойчивого способа определения, когда пользователь закрыл браузер. Один из подходов состоит в том, чтобы постоянно отправлять небольшие запросы AJAX на сервер. Если запросы не просматриваются в течение длительного периода времени, уничтожьте сеанс.

Другой подход заключается в прослушивании выгрузки окна DOM и отправке запроса на сервер для уничтожения сеанса.

3

Вы должны использовать $ _SESSION

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

Единственная причина, по которой вы хотите использовать cookie вместо сеанса, - это если вы хотите позаботиться о балансировке нагрузки. Поэтому, если у вас есть 2 сервера и один из них не работает, сеанс на этом сервере будет потерян. Теперь зарегистрированный пользователь (который имел сеанс на сервере 1) попросит вас снова войти в систему. Но если бы у него был куки-файл, ему не попросили снова войти в систему.

2

печенье ограничено для каждого домена вы можете установить 20 печенье и максимальный размер каждого составляет 4kb

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