PHP cookie не будет установлен, пока страница не перезагрузит TWICE. Что происходит?

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

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

Кроме того, логин ALSO работает, если вы просто дважды вводите информацию (т. Е. Она не выполняется в первый раз, а затем вы снова делаете это снова на странице 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). Любое понимание было бы высоко оценено! Заранее спасибо.

EDIT: Я забыл упомянуть, что PageA является индексом (так на самом деле называется index.php). Мой заголовок (местоположение) фактически перенаправляет на url (например, заголовок («location: http: //www.domainname.com»). Однако теперь я узнал, что весь процесс работает, когда я перенаправляю index.php вместо имени домена Но теперь у меня есть этот уродливый «/index.php» в URL-адресе.

Related of "PHP cookie не будет установлен, пока страница не перезагрузит TWICE. Что происходит?"

Ваш код выглядит хорошо для меня. Вывод страницы может, вероятно, кэшироваться браузером. Попробуйте добавить некоторые дополнительные заголовки в страницу 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,"/"); 

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

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