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环境搭建最新方法
Sep 05 PHP
不用数据库的多用户文件自由上传投票系统(3)
Oct 09 PHP
用PHP实现将GB编码转换为UTF8
Nov 25 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
Aug 03 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
Oct 31 PHP
PHP中判断变量为空的几种方法分享
Aug 26 PHP
PHP之sprintf函数用法详解
Nov 12 PHP
php使用str_replace实现输入框回车替换br的方法
Nov 24 PHP
PHP实现批量删除(封装)
Apr 28 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 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
一个程序下载的管理程序(一)
2006/10/09 PHP
有关 PHP 和 MySQL 时区的一点总结
2008/03/26 PHP
PHP HTML代码串 截取实现代码
2009/06/29 PHP
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
php微信开发之关注事件
2018/06/14 PHP
一个简单的js动画效果代码
2010/07/20 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
在Docker上开始部署Python应用的教程
2015/04/17 Python
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
Python利用sqlacodegen自动生成ORM实体类示例
2019/06/04 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
信号生成及DFT的python实现方式
2020/02/25 Python
python实现在线翻译功能
2020/03/03 Python
关于python中导入文件到list的问题
2020/10/31 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
工商企业管理实习自我鉴定
2013/12/04 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
2015年大学迎新晚会总结
2015/07/16 职场文书
关于五一放假的通知
2015/08/18 职场文书
运动会广播稿200字
2015/08/19 职场文书
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android