#php
#php
Вопрос:
я хочу, чтобы на моем веб-сайте была кнопка с надписью reset, и при нажатии на нее сеанс сбрасывался? есть идеи? Под сброшенным я подразумеваю просто очистку сеанса, поэтому мне нужна кнопка html, которая при нажатии просто очищает сеанс.
Комментарии:
1. Что именно означает сброс? (Поддерживает сеанс, очищает сеанс, …?)
Ответ №1:
Создайте форму, содержащую две вещи: 1) скрытый var, содержащий текущий URL 2) кнопку, которая при нажатии направляет пользователя на страницу, которая очищает сеанс
на второй странице очистите сеанс, а затем, используя информацию $ _POST из формы, перенаправьте пользователя обратно на страницу, на которой он был.
Для уничтожения сеанса:
session_start(); // if it's not already started.
session_unset();
session_destroy();
Ответ №2:
Эта кнопка отправит форму PHP-скрипту, который выполняет это:
session_start();
session_destroy();
// Typically, after doing this you will redirect the user
// to the home page with something like:
header('Location: index.php');
Вот и все, что для этого нужно.
Пусть вас не смущает часть «отправить форму» — вам не нужно иметь в форме что-либо, кроме кнопки.
Комментарии:
1. или, может быть, просто
session_start(); $_SESSION = array()
.2. Но на самом деле это не сбрасывает сеанс, это просто уничтожает текущий сеанс?
3. @MarcB, @Crayon: После уничтожения сеанса обычно перенаправляют пользователя в соответствии с шаблоном PRG. Когда загрузится новая страница, сеанс больше не будет существовать, поэтому нет необходимости явно отключать переменные и т.д.
4. Джон: да, но установка в пустой массив оставляет текущий идентификатор сеанса нетронутым, но удаляет все предыдущие значения, что фактически было бы «сбросом», как того хочет операционная система.
Ответ №3:
Простой способ (который почти на 100% безопасен): используйте javascript для удаления cookie (большую часть времени PHPSESSID)
Немного более сложный способ (который намного безопаснее): используйте PHP, чтобы отменить установку $ _SESSION (чтобы пользователь больше не мог ничего делать с идентификатором PHPSESSID, чтобы предотвратить перехват), а затем отменить установку или регенерировать $ _COOKIE[‘PHPSESSID’] (или session_regenerate_id).
Ответ №4:
Это из руководства по PHP для session_destroy:
<?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();
?>
Сначала он сбрасывает все данные сеанса (чтобы их нельзя было использовать позже при загрузке той же страницы), прежде чем удалять cookie сеанса и, наконец, уничтожать сеанс, что приведет к удалению файла данных с диска.