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 相关文章推荐
使用Apache的rewrite技术
Jun 22 PHP
Php做的端口嗅探器--可以指定网站和端口
Oct 09 PHP
10条PHP编程习惯助你找工作
Sep 29 PHP
php学习笔记 [预定义数组(超全局数组)]
Jun 09 PHP
php 文件上传类代码
Aug 06 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
举例讲解PHP面对对象编程的多态
Aug 12 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
Jan 08 PHP
深入理解PHP类的自动载入机制
Sep 16 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
PHP与Web页面的交互示例详解二
Aug 04 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
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
Angular6封装http请求的步骤详解
2018/08/13 Javascript
Vue源码探究之状态初始化
2018/11/14 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
python3简单实现微信爬虫
2015/04/09 Python
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
python用户管理系统
2018/03/13 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
大众服装店创业计划书范文
2014/01/01 职场文书
教师党员思想汇报
2014/01/06 职场文书
承认错误的检讨书
2014/01/30 职场文书
中学生自我鉴定
2014/02/04 职场文书
五年级科学教学反思
2014/02/05 职场文书
公司合作意向书范文
2014/07/30 职场文书
世界环境日活动总结
2015/02/11 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android