记住帐号、记住密码、记住表单信息等“记住”的实现

登录界面有记住帐号、记住密码,留言时有记住表单信息等,这使得用户在下次访问该页面时不用重复地输入重复的信息,减少重复劳动。网页设计者当然要满足用户的需求,那么PHP是怎么实现这些“记住”的呢。
使用客户端的cookie可以实现上述需求,下面以留言板为实例来讲解:
先看一下一般的Form(不具有记住功能的表单):

<form action="post.php">
<p><input type="text" name="inpName" id="inpName"  /> <label for="inpName">名称(*)</label></p>
<p><input type="text" name="inpEmail" id="inpEmail" /> <label for="inpEmail">邮箱</label></p>
<p><input type="text" name="inpHomePage" id="inpHomePage" /> <label for="inpHomePage">网站链接</label></p>
<p><input name="btnSumbit" type="submit" tabcomment="6" value="提交"  /></p>
</form>

我们需要在名称、邮箱、网站链接处填上用户的信息,这些信息应该从用户上一次提交时得到。
只需要在post.php中加入下面的语句:

$sql = "insert into comment (nid,username,email,info,ip,site,submit_time) values ('$nid','$username','$email','$info','$ip','$site',NOW())";
$result = mysql_query($sql);
setcookie("CookieNAME",mysql_insert_id(),time()+94608000,"/"); /* 三年后 cookie 才会失效 */

把刚添加进数据库中的记录id保存在CookieNAME中,保存时间为三年。
上面是写入cookie,取出直接用$CookieNAME。可是取出id没什么用,我们需要的是用户的信息,那么就执行一下数据库查询操作就行了:

if(!empty($CookieNAME)){
$sql = "select username,email,site from comment where id=$CookieNAME";
$rss = mysql_query($sql);
$rs= mysql_fetch_array($rss);
}

然后把这些得到的信息填到上面的form表单中就完成了“记住”。
可是用户不一定都希望被“记住”,那么就要增加一个复选框供用户选择。表单中在按钮的右边添加:


<input type="checkbox" name="chkRemember" value="1" id="chkRemember" />
<label for="chkRemember">记住我,下次回复时不用重新输入个人信息</label>

post.php处理时只需要简单的判断复选框有没有被选中即可:

if(!empty($_POST["chkRemember"])){//如果复选框选中,设置cookie
setcookie("CookieNAME",mysql_insert_id(),time()+94608000,"/"); /* 三年后 cookie 才会失效 */
}

整个过程就是这样的,登录框和这个实现起来差不多。

2 thoughts on “记住帐号、记住密码、记住表单信息等“记住”的实现

  1. 如有有两个用户id分别为id1,id2
    如果id1用户在登录的时候,改变了cookie中的“用户id”为“id2”,那么登录的时候会不会使用的是id2的用户信息登录的?

  2. @110

    看一下这条语句,setcookie(“CookieNAME”,mysql_insert_id(),time()+94608000,”/”);
    因为Cookie只是存储在本地计算机上的。用户1把他的信息存在自己的电脑上,名称为CookieNAME。用户2也把自己的信息存在CookieNAME中。虽然上面的名称是一样的,都是CookieNAME,但是这是两台电脑上的CookieNAME. 故而用户1并不能得到用户2的信息。

    但是,如果两个用户在同一个电脑上登陆,那么以最后一位用户的信息为准,因为前面一个用户的信息已经被替换了,CookieNAME只保留最近设置的一份用户的信息。

发表回复

您可以匿名评论,只有「评论」 是必填项,其他的都可以不填。如果填写电子邮箱地址,有人回复时您将收到邮件通知。