Тестирую ли я переменную PHP $ _SESSION слишком рано после ее установки? - PullRequest
0 голосов
/ 26 мая 2011

У меня есть логин, который я реализовал с помощью AJAX, и PHP на бэкэнде устанавливает $ _SESSION ['guest'] перед отправкой текста ответа обратно.Затем javascript на внешнем интерфейсе перенаправляет меня на гостевую страницу, которая проверяет, является ли isset ($ _ SESSION ['guest']), но часто это приводит к значению false, и меня переводят на другую страницу (используя мою ветку else).

Мне интересно, возможно, я проверяю это слишком рано, и поэтому isset ($ _ SESSION ['guest']) приводит к значению false.Но я заставляю его отсчитывать 5 секунд перед перенаправлением на страницу, которая его проверяет, так что я этого не понимаю.

После того, как это произошло пару раз (я выхожу из системы и снова захожу), он перестает работать, и я не могу заставить его потерпеть неудачу, что, очевидно, не помогает!Я подумал, что это может быть проблема с кэшированием / cookie, но я все это очистил, и она все равно больше не потерпит неудачу.

Есть идеи?

//this is the login script snippet    
if($rows == 1){
          $_SESSION[$type] = $username; //$type is posted over as guest or client. this is valid right?
          $_SESSION[$type.'_id'] = $result['id'];
          echo $_SESSION['welcome'] = 'You have logged in successfully.';
    }


<?php

//snippet from the guest page. session_start() is invoked within the included 'page_top.php'
    include('page_top.php');
    if(isset($_SESSION['guest'])){
        if(isset($_GET['sect'])){
            if($_GET['sect'] == 'photography'){
                include('view_album.php');
            }
            else{
                include('404.html');
            }
        }
        else{
            include('welcome.php');
        }
    }
    else{
        include('403.html'); //i get redirected here!
    }

    include('page_bottom.php');

?>

edit: теперь я думаю, что когдаон терпит неудачу, переменная сеанса просто не устанавливается, потому что, если я перезагружаю свою гостевую страницу, она каждый раз приводит к странице 403.html, так что это не задержка, она просто не устанавливается.

Ответы [ 2 ]

1 голос
/ 27 мая 2011

Не думаю, что вы должны отображать переменную во время ее установки?Это не имеет никакого смысла для меня.

echo $_SESSION['welcome'] = 'You have logged in successfully.';

Если $ type публикуется как гость или клиент, не должно ли это быть $_SESSION[$_POST['type']]; или вы устанавливаете $ type для переменной POSTеще на странице?

0 голосов
/ 06 мая 2013

Вы должны включить это в верхней части страницы (до ЛЮБОГО вывода HTML или пробела и после <? Php): </p>

session_start();

EDIT:

Я знаю, что это старый пост. Но для тех, кому это нужно в будущем, вот оно!

...