php简单登录类

    <?   
      /*  
      * 名称:CnkknD PHP Login Class  
      * 描述:PHP用于登录的类,基于MySQL  
      * 作者:Daniel King,cnkknd@msn.com  
      * 日期:Start@2003/8/25Update@2004/4/16  
      */  
        
      class Login   
      {   
      var $appname="login"; //网站名称   
        
        
      var $username; //用户名   
        
      var $userpass; //密码   
        
        
      var $authtable="account"; //验证用数据表   
        
      var $col_username="username"; //用户名字段   
        
      var $col_password="password"; //用户密码字段   
        
      var $col_banned="banned"; //是否被禁止字段   
        
        
      var $use_cookie=true; //使用cookie保存sessionid   
        
      var $cookiepath='/'; //cookie路径   
        
      var $cookietime=108000; //cookie有效时间   
        
        
      var $err_mysql="mysql error"; //mysql出错提示   
        
      var $err_auth="username invalid or wrong password"; //用户名无效提示   
        
      var $err_user="user invalid"; //用户无效提示(被封禁)   
        
        
      var $err; //出错提示   
        
        
      var $error_report=false; //显示错误   
        
        
      function Login($appname="")   
      {   
      $this->appname=$appname; //初始化网站名称   
        
      }   
        
      function isLoggedin() //判断是否登录   
        
      {   
      if(isset($_COOKIE['sid'])) //如果cookie中保存有sid   
        
      {   
      session_id($_COOKIE['sid']);   
      session_start();   
      if($_SESSION['appname']!=$this->appname) Return false;   
      //为了防止不同的程序使用同一个登录类产生冲突,加了个appname作为区分标记   
        
      return true;   
      }   
      else //如果cookie中未保存sid,则直接检查session   
        
      {   
      session_start();   
      if(isset($_SESSION['appname']))   
      return true;   
      }   
      return false;   
      }   
        
      function userAuth($username,$userpass) //用户认证   
        
      {   
      $this->username=$username;   
      $this->userpass=$userpass;   
      $query="select * from `".$this->authtable."` where
      `".$this->col_username."`='$username';";   
      $result=mysql_query($query);   
      if(mysql_num_rows($result)==1) //找到此用户   
        
      {   
      $row=mysql_fetch_array($result);   
        
      if($row['banned']==1) //此用户被封禁   
        
      {   
      $this->errReport($this->err_user);   
      $this->err=$this->err_user;   
      return false;   
      }   
      elseif(md5($userpass)==$row[$this->col_password]) //密码匹配   
        
      {   
      $this->userinfo=$row;   
      return true;   
      }   
      else //密码不匹配   
        
      {   
      $this->errReport($this->err_auth);   
      $this->err=$this->err_auth;   
      return false;   
      }   
      }   
      else //没有找到此用户   
        
      {   
      $this->errReport($this->err_auth);   
      $this->err=$this->err_auth;   
      return false;   
      }   
      }   
        
      function setSession() //置session   
        
      {   
      $sid=uniqid('sid'); //生成sid   
        
      session_id($sid);   
      session_start();   
      $_SESSION['appname']=$this->appname; //保存程序名   
        
      $_SESSION['userinfo']=$this->userinfo; //保存用户信息(表中所有字段)   
        
        
      if($this->use_cookie) //如果使用cookie保存sid   
        
      {   
      if(!setcookie('sid',$sid,time()+$this->cookietime,$this->cookiepath))   
      {   
      $this->errReport("set cookie failed");   
      $this->err="set cookie failed";   
      }   
      }   
      else  
      setcookie('sid','',time()-3600); //清除cookie中的sid   
        
      }   
        
      function userLogout() //用户注销   
        
      {   
      session_start();   
      unset($_SESSION['userinfo']); //清除session中用户信息   
        
      unset($_SESSION['appname']); //清除session中程序名   
        
      if(setcookie('sid','',time()-3600)) //清除cookie中的sid   
        
      return true;   
      else    
      return false;   
      }   
        
      function errReport($str) //报错   
        
      {   
      if($this->error_report)   
      echo "ERROR: $str";   
      }   
      }   
      ?>   
      注意一下置session的一段,我是用select
      *把所有字段的信息都取出来了,其实没有必要,很多字段没有必要放在session里,大家可以根据需要,在通过验证之后,修改$类名->userinfo,然后$类名->setSsesion()。
        
        
      放一个例子   
      <?   
      include 'header.php';   
        
      if(isset($_POST[logout]))   
      {   
      $login->userLogout();   
      die('<script>window.location="'.$_POST[url].'";</script>');   
      }   
      if(isset($_POST[login]))    
      {   
      if($login->userAuth($_POST[account],$_POST[passwd]))   
      {   
      if($_SERVER[PHP_SELF]!='attachment') $login->setSession();   
      die('<script>window.location="'.$_POST[url].'";</script>');   
      }   
      echo ($login->err);   
      }   
      if(!$login->isLoggedin()) echo '<form method=post action=login.php><input
      name=account><input type=password name=passwd><input type=submit
      name=login></form>';   
      ?>   
      我这个里面的$_POST[url]一般是可以用$_SERVER["HTTP_REFERER"]取得的,但是有时候因为客户端装了诺顿的个人防火墙,$_SERVER["HTTP_REFERER"]就没用了。
        
      header.php里面关于login的一段   
      include_once 'inc/classLogin.php';   
      $login=new Login();   
      $login->sitename='uu';   
      $login->authtable='u_account';   
      $login->col_username='account';   
        
      $isloggedin=$login->isLoggedin();   
      ?>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值