PHP cookie не будет установлен, пока страница не перезагрузится ДВАЖДЫ.В чем дело? - PullRequest
2 голосов
/ 13 января 2012

Хорошо, вот странный.Я пытаюсь разобраться с моей первой системой входа в систему, так что терпите меня.

Есть 2 страницы.PageA.php имеет форму входа.Заполните форму и отправьте ее на страницу PageB.php.PageB выполняет проверку базы данных, извлекает результаты и устанавливает cookie со значением имени пользователя.Затем PageB использует заголовок ('location: PageA.php'), чтобы перенаправить обратно на страницу PageA, где PageA должен ГИПОТЕТИЧЕСКИ увидеть, что существует установленный файл cookie, и изменить его на что-то бесполезное и глупое (например, echo "Welcome back, username").НО проблема здесь.Все идет по плану, за исключением этого чертово приветственного заявления.По какой-то причине печенье не установлено.Или я так думаю.Затем я возвращаюсь к URL-адресу, повторно набираю URL-адрес в моем браузере, нажимаю Enter и затем вуаля.Печенье теперь распознано, и все работает прекрасно.Это работает даже так, что если вы затем выйдете из системы и снова войдете в систему, вам не нужно будет выполнять перезагрузку.

Кроме того, вход в систему ТАКЖЕ работает, если вы просто вводите информацию дважды (то есть она не работаетв первый раз, затем вы делаете это снова сразу же на PageA, и тогда он работает).Вот соответствующий код:

PageA.php:

    <?php if(empty($_COOKIE['user'])){?>
        <form action="PageB.php" method="get">

        <input onfocus="this.value='';" maxlength="35" type="text" class="username" value="Username" name="username" />

        <input onfocus="this.value='';" maxlength="12" type="password" class="username" value="Password" name="password"/>


        <input type="image" id="login" src="Images/home/login_button.png" />
        </form>
        <?php }
        else {

            echo "<div id='welcome'>Welcome, ".$_COOKIE['user']."!</div>

        ";
        }?>

PageB.php:

$query="SELECT * FROM users where username='".$user."' and password='".$pw."' LIMIT 1";
$result=mysql_query($query,$con);

$num_rows = mysql_num_rows($result);

if($num_rows>0){

    while($row = mysql_fetch_array($result)){

        $username=$row['username'];

    }

    if(isset($_COOKIE['user'])){

        setcookie('user',$username,time()-2000);

    }

    setcookie('user',$username,time()+3600*168,"/");

}
mysql_close();

header('location:PageA.php');

Еще более странно то, что у меня нет проблем на локальном хосте,только когда он включен (Bluehost).Любое понимание будет с благодарностью!Заранее спасибо.

РЕДАКТИРОВАТЬ: я забыл упомянуть, что PageA является индексом (так на самом деле называется index.php).Мой заголовок (местоположение) фактически перенаправляет на URL (например, header ('location: http://www.domainname.com').). Однако теперь я узнал, что весь процесс работает, когда я перенаправляю на index.php вместо имени домена. Но теперь у меня есть этот уродливый "/index.php "в URL.

Ответы [ 2 ]

3 голосов
/ 24 января 2013

В вашем редиректе удалите www и оставьте его как http://domainname.com

3 голосов
/ 13 января 2012

Ваш код выглядит нормально для меня. Вывод PageA , вероятно, кэшируется браузером. Попробуйте добавить несколько дополнительных заголовков в PageA (не забудьте добавить их до вывода чего-либо еще):

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

Они должны предотвращать кеширование браузера.


Кроме того, вы меняете один и тот же cookie дважды за один запрос (в некоторых случаях) здесь:

if(isset($_COOKIE['user'])){

    setcookie('user',$username,time()-2000);

}

setcookie('user',$username,time()+3600*168,"/");

Это не должно быть проблемой, но это не имеет смысла - первый запрос будет перезаписан вторым.

...