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脚本数据库功能详解(下)
Oct 09 PHP
用PHP实现维护文件代码
Jun 14 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
Dec 29 PHP
分享一个PHP数据流应用的简单例子
Jun 01 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
php使用for语句输出三角形的方法
Jun 09 PHP
php常量详细解析
Oct 27 PHP
详解如何在云服务器上部署Laravel
Jun 30 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
php插入mysql数据返回id的方法
May 31 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 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
当海贼王变成JOJO风
2020/03/02 日漫
PHP函数utf8转gb2312编码
2006/12/21 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
jQuery ul标签下拉菜单演示代码
2010/12/11 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
Python使用scrapy采集时伪装成HTTP/1.1的方法
2015/04/08 Python
Python中的getopt函数使用详解
2015/07/28 Python
python 获取当天每个准点时间戳的实例
2018/05/22 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
新员工培训个人的自我评价
2013/10/09 职场文书
优秀大学生自荐信
2014/06/09 职场文书
个性车贴标语
2014/06/24 职场文书
同学聚会邀请函
2015/01/30 职场文书
起诉书范文
2015/05/20 职场文书
孙振耀退休感言
2015/08/01 职场文书
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android