echo $ _SESSION затем сбросить - PullRequest
1 голос
/ 03 июля 2011

Я знаю, что это дилетантский вопрос, но мне нужно отобразить переменную сеанса, а затем уничтожить переменную.

Я пробовал это:

if(isset($_SESSION['m'])){
   echo($_SESSION['m']);
   unset($_SESSION['m']);
}

Я также пробовал session_destroy();

и я пытался сбросить / уничтожить сеанс в конце страницы (после закрытия тега HTML)

Проблема, с которой я столкнулся, заключается в том, что сеанс уничтожаетсяпрежде чем это отражается.Я использовал код выше без проблем.Можно ли как-то сделать то, что мне нужно, или мне нужно найти другое решение?

Заранее спасибо:)

Ответы [ 7 ]

12 голосов
/ 29 августа 2011

Я знаю, что уже немного поздно, но недавно я столкнулся с этой проблемой, и я отвечу на нее всем, кто в ней нуждается.

Я почти уверен, что вы перенаправили метод header ната же страница, которая сделала unset сессии.Что-то вроде этого:

<?php
    if(condition)
        $_SESSION = "foo";
    header("Location: $self");
?>
<html>
    ...
    <?php echo $_SESSION["foo"]; unset($_SESSION["foo"]); ?>
    ...

Проблема с header заключается в том, что он не останавливает выполнение скрипта (как кажется), и поэтому скрипт продолжал выполнять и сбрасывать сеанс.

Решение состоит в том, чтобы добавить exit(0) (или любой другой флаг, который вам может понадобиться) после перенаправления заголовка, например:

<?php
    if(condition)
        $_SESSION = "foo";
    header("Location: $self");
    exit(0);
?>

Это действительно очень непонятная проблема и занимает много времени, так какхорошо.

0 голосов
/ 16 марта 2017

Я просто столкнулся с этой проблемой снова, и мне всегда кажется, что она решается по-разному.На этот раз я решил использовать комбинацию php, jquery и ajax.

<script>
var message = '<?php echo $_SESSION['message'];?>';
$(document).ready(function(){
if (message != ''){
alert(message);
$('#dump').load("http://{your absolute path here}/killthemessenger.php");   
}
});
</script>
<div class="hidden" id="dump" >This Should Be Hidden With CSS</div>

Этот скрипт находится в моем меню навигации, которое присутствует на каждой странице, поэтому я могу отправить сообщение любомустраница, на которой пользователь находится легко.Он загружает сообщение сеанса в переменную javascript, затем предупреждает пользователя, а затем загружает страницу php в скрытый div «dump», который просто сбрасывает сообщение сеанса, поэтому он не предупреждает более одного раза.

killthemessenger.php

<?php
session_start();
unset($_SESSION['message']);
?>
0 голосов
/ 30 июля 2013

введите его над тегом .

<?php
 session_start();
 if(isset($_SESSION['m']))
      $_SESSION['m']=$_SESSION['m']+1;
 else
      $_SESSION['m']=1;
 echo "Session = ". $_SESSION['m'];
 ?> 

и введите этот тег ниже

 <?php

      if(isset($_SESSION['m']))
          unset($_SESSION['m']);
 ?> 
0 голосов
/ 18 февраля 2013

Проблема в том, что $ _SESSION является ссылкой, поэтому, когда вы копируете ее (или некоторое смещение внутри нее), вы фактически копируете ссылку. то есть:

$a = $_SESSION['a'];

копирует значение указателя $ _SESSION ['a'] в $ a, чтобы они указывали на одно и то же место в памяти. Поэтому, когда вы сбрасываете $ _SESSION ['a'], вы удаляете данные, на которые указывает $ a. Вот почему $ a исчезает в вашем эхо.

Этот ответ не решает проблему или курс, но, по крайней мере, объясняет, что происходит.

0 голосов
/ 03 июля 2011

Используйте это, может быть, это работает:

if(isset($_SESSION['m'])){
   echo($_SESSION['m']);
   str_pad(' ',4096);
   flush();
   sleep(1); // You can remove this line 
   unset($_SESSION['m']);
}
0 голосов
/ 03 июля 2011

Или, может быть, это

if(isset($_SESSION['m'])){
   $sessionVar = $_SESSION['m'];
   unset($_SESSION['m']);

   echo $sessionVar;
}
0 голосов
/ 03 июля 2011

Я думаю, что это может немного помочь вам или, по крайней мере, направить вас в правильном направлении.Попробуйте бросить каждое действие в свое собственное выражение if.

if ((isset($_SESSION['m']))) {
echo $_SESSION['m'];
}
if ((isset($_SESSION['m']))) {
unset($_SESSION['m']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...