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+MYSQL的文章管理系统(二)
Oct 09 PHP
echo, print, printf 和 sprintf 区别
Dec 06 PHP
深思 PHP 数组遍历的差异(array_diff 的实现)
Mar 23 PHP
加强版phplib的DB类
Mar 31 PHP
php查看session内容的函数
Aug 27 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
php数组使用规则分析
Feb 27 PHP
PHP版微信公众平台红包API
Apr 02 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
Dec 23 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
PHP单元测试配置与使用方法详解
Dec 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初学者头疼问题总结
2006/10/09 PHP
ThinkPHP中ajax使用实例教程
2014/08/22 PHP
composer.lock文件的作用
2016/02/03 PHP
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
js 轮播效果实例分享
2016/12/28 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
Angular 多级路由实现登录页面跳转(小白教程)
2019/11/19 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
JS实现放烟花效果
2020/03/10 Javascript
python和pyqt实现360的CLable控件
2014/02/21 Python
Python基于动态规划算法计算单词距离
2015/07/25 Python
Python实现约瑟夫环问题的方法
2016/05/03 Python
Python实现通讯录功能
2018/02/22 Python
python绘制地震散点图
2019/06/18 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
高质量“欢迎词”
2019/04/03 职场文书
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS
python运行脚本文件的三种方法实例
2022/06/25 Python