php登录类

PHP登录类

< ?
/*
* 名称:CnkknD PHP Login Class
* 描述:PHP用于登录的类,基于MySQL
* 作者:Daniel King,cnkknd@msn.com
* 日期:Start@2003/8/25,Update@2004/4/16
*/


class Login
{
var $ appname = "login" ; //网站名称


var $ username ; //用户名

var $ userpass ; //密码


var $ authtable = "account" ; //验证用数据表

var $ col_username = "username" ; //用户名字段

var $ col_password = "password" ; //用户密码字段

var $ col_banned = "banned" ; //是否被禁止字段


var $ use_cookie = true ; //使用cookie保存sessionid

var $ cookiepath = '/' ; //cookie路径

var $ cookietime = 108000; //cookie有效时间


var $ err_mysql = "mysql error" ; //mysql出错提示

var $ err_auth = "username invalid or wrong password" ; //用户名无效 提示

var $ err_user = "user invalid" ; //用户无效提示(被封禁)


var $ err ; //出错提示


var $ error_report = false ; //显示错误


function Login( $ appname = "" )
{
$ this - > appname= $ appname ; //初始化网站名称

}

function isLoggedin( ) //判断是否登录

{
if ( isset ( $ _COOKIE [ 'sid' ] ) ) //如果cookie中保存有sid

{
session_id ( $ _COOKIE [ 'sid' ] ) ;
session_start ( ) ;
if ( $ _SESSION [ 'appname' ] ! = $ this - > appname) Return false ;
//为了防止不同的程序使用同一个登录类产生冲突,加了个appname作为区分 标记

return true ;
}
else //如果cookie中未保存sid,则直接检查session

{
session_start ( ) ;
if ( isset ( $ _SESSION [ 'appname' ] ) )
return true ;
}
return false ;
}

function userAuth( $ username , $ userpass ) //用户认证

{
$ this - > username= $ username ;
$ this - > userpass= $ userpass ;
$ query = "select * from `" . $ this - > authtable. "` where `" . $ this - > col_username. "`='$username';" ;
$ result = mysql_query ( $ query ) ;
if ( mysql_num_rows ( $ result ) = = 1) //找到此用户

{
$ row = mysql_fetch_array ( $ result ) ;

if ( $ row [ 'banned' ] = = 1) //此用户被封禁

{
$ this - > errReport( $ this - > err_user) ;
$ this - > err= $ this - > err_user;
return false ;
}
elseif ( md5 ( $ userpass ) = = $ row [ $ this - > col_password] ) //密码匹配

{
$ this - > userinfo= $ row ;
return true ;
}
else //密码不匹配

{
$ this - > errReport( $ this - > err_auth) ;
$ this - > err= $ this - > err_auth;
return false ;
}
}
else //没有找到此用户

{
$ this - > errReport( $ this - > err_auth) ;
$ this - > err= $ this - > err_auth;
return false ;
}
}

function setSession( ) //置session

{
$ sid = uniqid ( 'sid' ) ; //生成sid

session_id ( $ sid ) ;
session_start ( ) ;
$ _SESSION [ 'appname' ] = $ this - > appname; //保存程序名

$ _SESSION [ 'userinfo' ] = $ this - > userinfo; //保存用户信息(表中所有字段)


if ( $ this - > use_cookie) //如果使用cookie保存sid

{
if ( ! setcookie ( 'sid' , $ sid , time ( ) + $ this - > cookietime, $ this - > cookiepath) )
{
$ this - > errReport( "set cookie failed" ) ;
$ this - > err= "set cookie failed" ;
}
}
else
setcookie ( 'sid' , '' , time ( ) - 3600) ; //清除cookie中的sid

}

function userLogout( ) //用户注销

{
session_start ( ) ;
unset ( $ _SESSION [ 'userinfo' ] ) ; //清除session中用户信息

unset ( $ _SESSION [ 'appname' ] ) ; //清除session中程序名

if ( setcookie ( 'sid' , '' , time ( ) - 3600) ) //清除cookie中的sid

return true ;
else
return false ;
}

function errReport( $ str ) //报错

{
if ( $ this - > error_report)
echo "ERROR: $str" ;
}
}
? >
注意一下置session的一段,我是用select * 把所有字段的信息都取出来了,其实没有必要,很多字段没有必要放在session里,大家可以根据需 要,在通过验证之后,修改$类名- > userinfo,然后$类名- > setSsesion( )

放一个例子
< ?
include 'header.php' ;

if ( isset ( $ _POST [ logout] ) )
{
$ login - > userLogout( ) ;
die ( '<script>window.location="' . $ _POST [ url] . '";</script>' ) ;
}
if ( isset ( $ _POST [ login] ) )
{
if ( $ login - > userAuth( $ _POST [ account] , $ _POST [ passwd] ) )
{
if ( $ _SERVER [ PHP_SELF] ! = 'attachment' ) $ login - > setSession( ) ;
die ( '<script>window.location="' . $ _POST [ url] . '";</script>' ) ;
}
echo ( $ login - > err) ;
}
if ( ! $ login - > isLoggedin( ) ) echo '<form method=post action=login.php><input name=account><input type=password name=passwd><input type=submit name=login></form>' ;
? >
我这个里面的$_POST[ url] 一般是可以用$_SERVER[ "HTTP_REFERER" ] 取 得的,但是有时候因为客户端装了诺顿的个人防火墙,$_SERVER[ "HTTP_REFERER" ] 就没用了。
header. php里面关于login的一段
include_once 'inc/classLogin.php' ;
$login= new Login( ) ;
$login- > sitename= 'uu' ;
$login- > authtable= 'u_account' ;
$login- > col_username= 'account' ;

$isloggedin= $ login- > isLoggedin( ) ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值