< ?
/*
* 名称: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( ) ;
php登录类
最新推荐文章于 2024-09-28 07:40:26 发布
PHP登录类