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作为Shell脚本语言使用
Oct 09 PHP
基于mysql的论坛(3)
Oct 09 PHP
php 获取客户端的真实ip
Nov 30 PHP
PHP中文URL编解码(urlencode()rawurlencode()
Jul 03 PHP
php gzip压缩输出的实现方法
Apr 27 PHP
PHP中new static()与new self()的区别异同分析
Aug 22 PHP
php session的锁和并发
Jan 22 PHP
PHP二维数组去重实例分析
Nov 18 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
Dec 19 PHP
PHP实现微信申请退款功能
Oct 01 PHP
PHP项目多语言配置平台实现过程解析
May 18 PHP
详解Laravel框架的依赖注入功能
May 27 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实现递归循环每一个目录
2010/08/08 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
jQuery+HTML5实现手机摇一摇换衣特效
2015/06/05 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
Django使用多数据库的方法
2017/09/06 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
微信小程序签到功能
2018/10/31 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
nodejs和react实现即时通讯简易聊天室功能
2019/08/21 NodeJs
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
深入理解Python 代码优化详解
2014/10/27 Python
Centos5.x下升级python到python2.7版本教程
2015/02/14 Python
python遍历类中所有成员的方法
2015/03/18 Python
Python中编写ORM框架的入门指引
2015/04/29 Python
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
分享一个简单的python读写文件脚本
2017/11/25 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
2018/08/03 Python
python如何查看微信消息撤回
2018/11/27 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
X/HTML5 和 XHTML2
2008/10/17 HTML / CSS
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
运动员获奖感言
2014/08/15 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
大学生团日活动总结
2015/05/06 职场文书
java基础——多线程
2021/07/03 Java/Android