2010年6月24日星期四

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

登录界面有记住帐号、记住密码,留言时有记住表单信息等,这使得用户在下次访问该页面时不用重复地输入重复的信息,减少重复劳动。网页设计者当然要满足用户的需求,那么PHP是怎么实现这些“记住”的呢。
使用客户端的cookie可以实现上述需求,下面以留言板为实例来讲解:
先看一下一般的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表单中就完成了“记住”。
可是用户不一定都希望被“记住”,那么就要增加一个复选框供用户选择。表单中在按钮的右边添加:




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

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

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

2 条评论:

  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只保留最近设置的一份用户的信息。

    回复删除