好的,这是一个奇怪的。我正试图处理我的第一个登录系统,所以请耐心等待。
共有2页。 PageA.php有登录表单。填写表格并提交给PageB.php。 PageB对数据库运行检查,检索结果,并使用username的值设置cookie。然后PageB使用header('location:PageA.php')重定向回PageA,其中PageA应该看到有一个设置的cookie,并改为做一些无用和愚蠢的事情(即echo“欢迎回来,用户名”)。但问题出在这里。一切都按计划进行,除了那个该死的欢迎回复声明。由于某种原因,cookie没有设置。或者我认为。然后我回到url地址,在我的浏览器中重新输入url,按回车键,然后瞧。现在已经识别出cookie,一切都很美妙。它甚至可以工作,如果你要注销并重新登录,你就不需要重新加载。
此外,如果您只是输入两次信息(即第一次失败,然后您在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');
更奇怪的是,我在localhost上没有任何问题,只有当它被放到网上时(Bluehost)。任何见解将不胜感激!提前谢谢。
编辑:我忘了提到 PageA 是索引(实际上名为index.php)。我的标题(位置)实际上重定向到url(例如标题('location:http://www.domainname.com')。但是我现在知道当我重定向到index.php而不是域名时整个过程都有效但是现在我在网址上有那个丑陋的“/index.php”。答案 0 :(得分:3)
您的代码看起来不错。 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,"/");
这应该没有问题但是没有意义 - 第一个请求将被第二个请求覆盖。
答案 1 :(得分:3)
在重定向上移除www并将其保留为http://domainname.com