Я пытаюсь уничтожить сеанс без использования session_destroy, потому что хочу передать информационное сообщение. Мой вопрос в том, действителен ли мой код, я уже сбросил сеанс, сказав, что все $_SESSION - это пустой массив или по соображениям безопасности использование session_destroy является обязательным, но если я использую session_destoy, я больше не могу передать $_SESSION['msg'].
<?
session_start();
$_SESSION = array();
//session_destoy();
$_SESSION['msg'] = "You have logged out.";
header('Location: index.php');
?>






Во-первых, вы должны использовать session_unset(); для удаления всех переменных / значений сеанса, а не назначать ему новый массив.
Основной ответ на ваш запрос:
Я бы рекомендовал использовать session_destroy(), потому что он удаляет сгенерированный внутренний идентификатор сеанса, который будет проверяться при каждом запросе, исходящем от клиентского устройства. Чтобы убедиться в этом, просто распечатайте идентификатор сеанса с помощью функции echo session_id(); до и после опустошения сеанса, как вы это делаете. Это приведет к тому же идентификатору сеанса.
Поэтому хорошей идеей будет сначала уничтожить его, а затем создать новое.
После того, как вы уничтожите сеанс с помощью session_destroy(), вы можете снова начать новый сеанс и установить в нем свое сообщение $_SESSION['msg'].
Я только что понял, что могу сделать еще один трюк, чтобы проверить, с какой страницы я пришел, когда меня перенаправили на index.php, который является областью входа, и я могу использовать $ _SERVER ["HTTP_REFERER"], и если я перешел с logout.php на сгенерируйте сообщение «Вы вышли из системы».
Но @John, вы не получите HTTP_REFERER, если бы открыли страницу в новой вкладке.
Спасибо, @John, за голосование. :-)
Вам нужен session_unset()
session_unset just clears out the session for usage. The session is still on the users computer. Note that by using session_unset, the variable still exists. session_unset just remove all session variables. it does not destroy the session....so the session would still be active.
через: http://php.net/manual/en/function.session-unset.php
и тогда вы можете сделать это как
$_SESSION['msg'] = "You have logged out.";
так что msg добавлен в сессию.
ИЛИ Вы тоже можете сделать это так:
$msg = "Whatever the message is";
header("Location: index.php?message=$msg ");
В файле index.php
if (isset($_GET['message']) && !empty($_GET['message'])){
echo $_GET['message'];
}
или я могу использовать $ _SERVER ["HTTP_REFERER"] для создания сообщения, если я пришел из logout.php
Да, плохо, я просто забыл, что делает session_unset, поэтому я просто отключил сеанс имени пользователя, и сообщение все еще может пройти. Задача решена.
Вы можете использовать файлы cookie; вы можете сохранить, например, имя пользователя, пароль и статус подключения пользователя. Когда пользователь возвращается на ваш сайт, вы знаете, кто он такой и подключен ли он уже.
setcookie ("Msg", "you have logged out", time () + 3600);
(для файла cookie на один час вы указываете время, которое хотите ...)
Просто пользователь session_unset($_SESSION['session_name']); надеется, что это сработает.
Это именно то, что я сделал.
Ваш код:
<?
session_start();
$_SESSION = array();
//session_destoy();
$_SESSION['msg'] = "You have logged out.";
header('Location: index.php');
?>
на странице индекса сделайте следующее:
<?php
if (!empty($_SESSION['msg']) && isset($_SESSION['msg'])){
echo $_SESSION['msg'];
unset($_SESSION['msg']);
}
?>
это покажет ваше сообщение один раз и сразу сбросит его.
что означает deos "потому что я хочу нести информационное сообщение"?