Hy Я новичок в php и пытаюсь уничтожить сеанс в соответствии с документацией php здесь: http://php.net/manual/en/function.session-destroy.php
поэтому я использую этот код:
<?php
session_start();
echo 'cokkies before delete session';
var_dump($_COOKIE);
var_dump($_SESSION);
echo '-------------- <br>';
$_SESSION = array();
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
session_destroy();
echo 'cokkies after delete session';
var_dump($_COOKIE);
var_dump($_SESSION);
?>
Увидеть документация:
session_destroy () уничтожает все данные, связанные с текущим сеансом. Он не сбрасывает глобальные переменные, связанные с сеансом, и не сбрасывает cookie сеанса. Чтобы снова использовать переменные сеанса, необходимо вызвать метод session_start ().
… даже если он не установил сеансовый файл cookie, $_COOKIES
superglobal включает в себя все куки, которые браузер отправил, когда сделал запрос. Это потребовало бы путешествия во времени для session_destroy
запретить браузеру отправлять их в запросе, который в данный момент обрабатывается.
то, что я не понимаю, не имеет значения, сколько раз я запускаю этот код, свойство PHPSESSID в суперглобальном элементе $ _COOKIE всегда одинаково.
Если идентификатор сеанса, отправленный браузером, не соответствует существующему сеансу, при вызове start_session
затем он все еще использует тот же идентификатор сеанса для нового сеанса.
session_regenerate_id
вынуждает генерацию нового идентификатора, start_session
не.
Просто используйте session_regenerate_id()
после уничтожения сеанса.
https://secure.php.net/manual/en/function.session-regenerate-id.php
Кроме того, уничтожение сеансов не отменяет cookie.
хорошо, привет, просто хочу оставить несколько вещей. Ладно, все просто, сеанс уничтожен, не отменяется то, что было установлено в cookie. Как мы все знаем, куки доступны до истечения срока действия. И даже если сеанс будет восстановлен, он все равно обновит cookie. Я бы посоветовал вам управлять им, если вы обновите эту страницу миллион раз, и вы все равно получите тот же результат, что и результат. Это больше похоже на то же самое и ожидание лучшего результата. Я мог бы написать вам фрагмент, если хотите. Надеюсь это поможет
=== Мое открытие ==
<?php
session_start();
define('NEWLINE', '<br><br>');
echo "cookie before delete session. <br>";
var_dump($_COOKIE);
echo NEWLINE;
echo "session Here <br>";
var_dump($_SESSION);
echo NEWLINE;
echo "------------------------<br>";
$_SESSION = array();
if (ini_get('session.use_cookies'))
{
$params = session_get_cookie_params();
echo "cookie already has PHPSESSID even before you set it here ..<br>";
// The solution i could arrive with
// without this PHPSESSID wouldn't give you a new id.
session_regenerate_id();
}
// now destroy
session_destroy();
echo "Cookie here would not change. Just refresh the page and try commenting session_regenerate_id() to see the difference. <br>";
var_dump($_COOKIE);
echo "Session when destroyed. <br>";
var_dump($_SESSION);
?>
Hy Итак, я выяснил, почему функция setcookie () не уничтожает файл cookie PHPSESSID. Функция session_set_cookie_params () должна быть установлена до начала сеанса, поэтому позже функция setcookie () сможет истечь из файла cookie PHPSESSID.
этот код работает:
<?php
$lifetIme = 60 * 60 * 24 * 360;
$path = '/';
$domain = 'yourdomain';
$secure = isset($_SERVER["HTTPS"]);
$httponly = true;
session_set_cookie_params ($lifetIme, $path, $domain, $secure, $httponly);
session_start();
$expire = strtotime('-1 year');
setcookie('PHPSESSID', '', $expire, $path, $domain, $secure, $httponly);
session_destroy();
?>