Сброс сеанса без session_destroy действителен?

Я пытаюсь уничтожить сеанс без использования 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');
?>

что означает deos "потому что я хочу нести информационное сообщение"?

user9487972 02.04.2018 08:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
139
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Во-первых, вы должны использовать session_unset(); для удаления всех переменных / значений сеанса, а не назначать ему новый массив.

Основной ответ на ваш запрос:

Я бы рекомендовал использовать session_destroy(), потому что он удаляет сгенерированный внутренний идентификатор сеанса, который будет проверяться при каждом запросе, исходящем от клиентского устройства. Чтобы убедиться в этом, просто распечатайте идентификатор сеанса с помощью функции echo session_id(); до и после опустошения сеанса, как вы это делаете. Это приведет к тому же идентификатору сеанса. Поэтому хорошей идеей будет сначала уничтожить его, а затем создать новое.

После того, как вы уничтожите сеанс с помощью session_destroy(), вы можете снова начать новый сеанс и установить в нем свое сообщение $_SESSION['msg'].

Я только что понял, что могу сделать еще один трюк, чтобы проверить, с какой страницы я пришел, когда меня перенаправили на index.php, который является областью входа, и я могу использовать $ _SERVER ["HTTP_REFERER"], и если я перешел с logout.php на сгенерируйте сообщение «Вы вышли из системы».

itarachiu 02.04.2018 08:56

Но @John, вы не получите HTTP_REFERER, если бы открыли страницу в новой вкладке.

Himanshu Upadhyay 02.04.2018 08:57

Спасибо, @John, за голосование. :-)

Himanshu Upadhyay 02.04.2018 09:09
Ответ принят как подходящий

Вам нужен 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

itarachiu 02.04.2018 08:58

Да, плохо, я просто забыл, что делает session_unset, поэтому я просто отключил сеанс имени пользователя, и сообщение все еще может пройти. Задача решена.

itarachiu 02.04.2018 09:07

Вы можете использовать файлы cookie; вы можете сохранить, например, имя пользователя, пароль и статус подключения пользователя. Когда пользователь возвращается на ваш сайт, вы знаете, кто он такой и подключен ли он уже.

setcookie ("Msg", "you have logged out", time () + 3600);

(для файла cookie на один час вы указываете время, которое хотите ...)

Просто пользователь session_unset($_SESSION['session_name']); надеется, что это сработает.

Это именно то, что я сделал.

itarachiu 02.04.2018 09:09

Ваш код:

<?
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']);
}
?>

это покажет ваше сообщение один раз и сразу сбросит его.

Другие вопросы по теме