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