Вопрос по session, php, setcookie, cookies – PHP сессия или cookie

12

Какой наилучший способ держать пользователя вошедшим в систему на сайте с поддержкой PHP, пока он не закроет свой браузер?

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

Сессия на самом деле использует куки для хранения SID Alvin Wong
@ Alvin Я знаю, но мой вопрос в том, что лучше использовать в PHP treng

Ваш Ответ

7   ответов
3

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

23

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

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

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

Примечание: если вы используете несколько серверов для балансировки нагрузки, вы должны быть предельно осторожны, потому что по умолчанию данные сеанса хранятся локально на сервере. Можно обмениваться данными сеанса между несколькими серверами, но этовыходит за рамки этого вопроса, Кроме того, вы можете хранить данные в базе данных.

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

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

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

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

3

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

Конечно, вы можете получить лучшее из обоих миров! Узнав, что каждый из них делает, вы можете использовать комбинацию файлов cookie и сеансов, чтобы ваш сайт работал именно так, как вы хотите. & Quot;

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

4

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

Ниже приведен код для действительно уничтожения сеанса, скопированный изпример дано в руководстве по 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();

О вашем вопросе:

What's better to use to keep user logged in until he closes his browser?

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

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

1

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

2

Размер cookie ограничен для каждого домена, вы можете установить 20 файлов cookie, и максимальный размер каждого составляет 4 КБ.

Похожие вопросы