极致网信息博客中心 Welcome to Guangxi www.zunsm.com Information Technology Co., Ltd.

:在PHP中单击登录

时间::2013-02-21    来源:本站     作者:wongshing 阅读次数:
实例说明
  现在越来越多的企业、个人喜欢用互联网来进行沟通和交流,诸如留言板、聊天室、论坛和博客等交流和展示自己的方式层出不穷,而且一个企业或者个人可能拥有上述多种交流方式。因为每种交流方式都具有自己的身份验证机制,这样势必造成如果某位用户要以会员的身份访问网站,需要在每个网站上注册,通过身份验证后,才能以会员的身份访问网站。即使用户以同样的用户名与密码在每个网站上注册,这样虽然可以避免忘记或混淆各用户名和密码,但是如果用户在某一时间段内,需访问网站的多个页面或者在不同网站间跳转,仍然需要登录后才能以会员的身份访问网站的话,不仅给用户带来了不便,而且也浪费了服务器的空间。
  如果所有的网站能够实现单击登录,不仅在用户体验方面有所提高,而且真正体现了集团多个网站的“兄弟”性。通过这种有机结合,不但便于对网站进行管理,而且能更好地体现公司大平台、大渠道的理念。同时,这样做也利于网站的相互促进与相互宣传。
  运行本实例,如果是第一次登录,那么将进入登录页面,登录成功后进入博客主页,单击博客主页中的“我的论坛”超链接,将以此用户身份进入论坛系统主页;同样,单击论坛系统主页中的”博客“超链接可以跳转到博客主页面。
关键技术
  本实例开发一个博客网站和一个论坛网站,通过COOKIE实现单击登录的功能,即无论在博客或者论坛网站中,只要登录后,此用户名在一定时间内,在这两个网站中是通用的。
  其关键就是对COOKIE值的判断,如果COOKIE的值存在并且与数据库中存储的值相同,那么就可以实现不同系统之间的跳转,否则就必须先登录,才可以访问系统中的内容,其关键代码如下:
  <?php
  include_once'conn/conn.php';   //执行连接数据库的操作
  if($_COOKIE[name]!=""and$_COOKIE[id]!=""){
       $sql="select*from tb_login where name="".$_COOKIE[name]."'and login_id='".$_COOKIE[id]."";
       $num=$conne->getRowsNum($sql);       //返回查询结果
       $conne->close_rst();                 //关闭数据库
       if($num!=0 or $num!="){
               header("Location:default.php");
       }else{                               //否则输出登录页面的内容
   ?>
   <!--省略了部分代码-->
   <?php
        }
   }else{
   //清除数据库中1小时以前存储的用户登录数据(即session过期以后的数据)
   $datetimes=mktime()-3600;           //获取1小时前的时间戳
   $sql="delete from tb_login where datetime<".$datetimes.""; //执行删除操作
   $nums=$conne->uidRst($sqls);              //返回查询结果
   ?>
      <!--省略了部分代码-->
   <?php }?>
设计过程
  这里以博客网站为例,讲解具体的操作步骤:
  (1)创建index.php页面,添加用户登录的表单,将登陆信息提交到index_ok.php页面中。在index.php页面汇总首先连接数据库,然后判断COOKIE的值是否为空,如果值为空,并且在指定的数据表中存在该记录,那么将直接进入网站的主页,不必进行登录操作;如果值为空,则输出网站登录页面,并且删除指定数据表中已经过期的用户登录信息,其代码请参考关键技术中的内容。
  (2)创建index_ok.php文件,获取表单中提交的登录信息,完成登录操作。单击登录的第一个关键点,将登陆成功的用户名和Session ID值保存到COOKIE中,设置COOKIE的过期时间为1小时,有限范围是服务器的根目录;单击登录的第二个关键点:将登陆的用户名和Session  ID值存储到一个数据表镇南关,此COOKIE值和数据表中的数据是验证当前用户是否具有单点登录权限的唯一依据,代码如下:
  <?php
  session_start();              //执行连接数据库的操作
  include_once'conn/conn.php';   //获取用户名
  $name=addslashes($_POST['name']);   //获取密码
  $pwd=$_POST['pwd'];
  if(!empty($name)and !empty($pwd)){
          $sql="select * from tb_member where name=".$name."'and password='".$pwd."'";
          $num=$conne->getRowsNum($sql);     //返回查询结果
          $conne->close_rst();               //释放查询结果
          if($num==0 or $num=="){            //如果不正确
                 echo"<script>alert('用户名和密码不正确!');window.location.href='index.php';</script>";
           }else{                           //如果正确,则将登陆用户名数据存储到COOKIE中
                 $session_id=session_id();       //获取SESSION ID
                 setcookie("name",$name,time()+3600,"/");    //创建COOKIE
                 setcookie("id",md5($session_id),time()+3600,"/");   //创建COOKIE
 $sqls="insert into tb_login(name,login_id,datetime)values('".$name.",'".md5($session_id)."''".mktime()."')";$nums=$conne->uidRst($sqls);
                   //返回查询结果
                    echo"<script>alert('登录成功!');window.location.href='default.php';</script>";
          }
    }
    ?>
    (3)创建default.php网站主页面。其关键就是根据FCOOKIE值和指定数据表中存储的数据判断当前用户是否具有访问主页的权限,如果有则输出网站主页的内容;否则将跳转到登陆页面,代码如下:
    <?php
    if($_COOKIE[name]!=""and $_COOKIE[id]!=""){
           include_once 'conn/conn.php';       //执行连接数据库的操作
           $sql="select * from tb_login where name='".$_COOKIE[name]."'and login_id='".$_COOKIE[id].'"";
           $num=$conne->getRowsNum($sql);   //返回查询结果
           $conne->close_rst();           //关闭数据库
           if($num==0 or $num=="){
                  header("Location:index.php");
           }else{
     ?>
     //省略了主页面代码;
     <?php
          }
     }else{
          header("Location:index.php");
     }
     ?>
     (4)在conn文件夹下创建conn.php文件,实现连接数据库的操作。
秘笈心法

  单击登录的注意事项。
  如果当前用户手动清除了客户端COOKIE的信息,那么本实例的功能就会失效,需要重新登录;如果当前用户的客户端禁止了COOKIE功能的使用,那么本实例就不能实现单击登录的效果。
网站小编: 喜欢本站的话请大家把本站告诉给你朋友哦!地址是 幸运农场走势图-重庆彩 www.zunsm.com QQ群:134624762
web设计/网站开发
南宁网站建设版权所有
南宁网站建站首页 关于我们 联系我们 网站地图 南宁网站建设 网站制作 网页设计 广西网站优化 php建站
幸运农场走势图-重庆彩

用户名:

密 码:

             忘记密码?