php的一个登录的类 [推荐]


Posted in PHP onMarch 16, 2007

PHP代码:
<?
/*
* 名称:CnkknD PHP Login Class
* 描述:PHP用于登录的类,基于MySQL
* 作者:Daniel King,cnkknd@163.com
* 日期:2003/8/25
*/

class Login
{
var $username; //用户名
var $userpass; //密码
var $userid; //用户id
var $userlevel; //用户级别

var $authtable="account"; //验证用数据表

var $usecookie=true; //使用cookie保存sessionid
var $cookiepath='/'; //cookie路径
var $cookietime=108000; //cookie有效时间

var $err_mysql="mysql error"; //mysql出错提示
var $err_username="username invalid"; //用户名无效提示
var $err_user="user invalid"; //用户无效提示(被封禁)
var $err_password="password error"; //密码错误提示

var $err; //出错提示

var $errorreport=false; //显示错误

function Login($dbserv,$dbport,$dbuser,$dbpass,$dbname) //构造函数,连接数据库
{
if(@mysql_pconnect($dbserv.":".$dbport,$dbuser,$dbpass))
{
mysql_select_db($dbname);
}
else
{
$this->errReport($this->err_mysql);
$this->err=$this->err_mysql;
}
}

function isLoggedin() //判断是否登录
{
if(isset($_COOKIE['sid'])) //如果cookie中保存有sid
{
session_id($_COOKIE['sid']);
session_start();
$this->username=$_SESSION['username'];
$this->userid=$_SESSION['userid'];
$this->userlevel=$_SESSION['userlevel'];
return true;
}
else //如果cookie中未保存sid,则直接检查session
{
session_start();
if(isset($_SESSION['username']))
return true;
}
return false;
}

function userAuth($username,$userpass) //用户认证
{
$this->username=$username;
$this->userpass=$userpass;
$query="select * from `".$this->authtable."` where `username`='$username';";
$result=mysql_query($query);
if(mysql_num_rows($result)!=0) //找到此用户
{
$row=mysql_fetch_array($result);
if($row['bannd']==1) //此用户被封禁
{
$this->errReport($this->err_user);
$this->err=$this->err_user;
return false;
}
elseif(md5($userpass)==$row['userpass']) //密码匹配
{
$this->userid=$row['id'];
$this->userlevel=$row['userlevel'];
return true;
}
else //密码不匹配
{
$this->errReport($this->err_password);
$this->err=$this->err_password;
return false;
}
}
else //没有找到此用户
{
$this->errReport($this->err_username);
$this->err=$this->err_username;
return false;
}
}

function setSession() //置session
{
$sid=uniqid('sid'); //生成sid
session_id($sid);
session_start();
$_SESSION['username']=$this->username; //给session变量赋值
$_SESSION['userid']=$this->userid; //..
$_SESSION['userlevel']=$this->userlevel; //..
if($this->use_cookie) //如果使用cookie保存sid
{
if(!setcookie('sid',$sid,time()+$this->cookietime,$this->cookiepath))
$this->errReport("set cookie failed");
}
else
setcookie('sid','',time()-3600); //清除cookie中的sid
}

function userLogout() //用户注销
{
session_start();
unset($_SESSION['username']); //清除session中的username
if(setcookie('sid','',time()-3600))
//清除cookie中的sid
return true;
else 
return false;
}

function errReport($str) //报错
{
if($this->error_report)
echo "ERROR: $str";
}
}
?> 

mysql中表的结构

代码:
CREATE TABLE `account` (
  `id` bigint(20) NOT NULL auto_increment,
  `username` varchar(255) NOT NULL default '',
  `userpass` varchar(255) NOT NULL default '',
  `banned` tinyint(1) NOT NULL default '0',
  `userlevel` tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (`id`)

使用一例

PHP代码:
<?
include "../myclasses/Login.php";
$dbserv="localhost";
$dbport="3306";
$dbuser="root";
$dbpass="123456";
$dbname="test";

$login=new Login($dbserv,$dbport,$dbuser,$dbpass,$dbname);
$login->error_report=true;
$login->cookietime=3600*24*30;
if($login->isLoggedin())
{
echo $login->username." has aready logged in";
}
elseif($login->userAuth("danielking","1234"))
{
echo "login successfully";
$login->setSession();
}

echo "<p>...</p>";

/*
if($login->userLogout())
echo "logged out";
else
echo "logout failed";
*/
?>  

 

PHP 相关文章推荐
PHP 模板高级篇总结
Dec 21 PHP
dedecms后台验证码总提示错误的解决方法
Mar 21 PHP
php 中文处理函数集合
Aug 27 PHP
PHP $_SERVER详解
Jan 16 PHP
php上的memcache和memcached两个pecl库
Mar 29 PHP
php截取字符串并保留完整xml标签的函数代码
Feb 06 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
YII路径的用法总结
Jul 09 PHP
微信自定义菜单的创建/查询/取消php示例代码
Aug 05 PHP
PHP AjaxForm提交图片上传并显示图片源码
Nov 29 PHP
PHP常用的类封装小结【4个工具类】
Jun 28 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 PHP
对Session和Cookie的区分与解释
Mar 16 #PHP
PHP中cookies使用指南
Mar 16 #PHP
PHP学习资料汇总与网址
Mar 16 #PHP
PHP编码规范-php coding standard
Mar 16 #PHP
PHP操作文件方法问答
Mar 16 #PHP
用PHP控制用户的浏览器--ob*函数的使用说明
Mar 16 #PHP
PHP中for循环语句的几种变型
Mar 16 #PHP
You might like
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
php 中的str_replace 函数总结
2007/04/27 PHP
php读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
nginx 设置多个站跨域
2021/03/09 Servers
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
jQuery擦除插件eraser使用方法详解
2020/01/11 jQuery
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
Python用Try语句捕获异常的实例方法
2019/06/26 Python
python实现指定ip端口扫描方式
2019/12/17 Python
Python2与Python3的区别详解
2020/02/09 Python
linux 下selenium chrome使用详解
2020/04/02 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
小学生安全保证书
2014/02/01 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
洗手间标语
2014/06/23 职场文书
2014年领班工作总结
2014/11/25 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers