i wrote a simple easy class,
please give me some advise and help my skills,
thank you^_^
(using 'DB/DataObject.php,Smarty...)
<?php
require_once('DB/DataObject.php');
define('AUTH_PREFIX','__auth__');
class Auth
{
var $_sessionname;
var $name;
var $login_time;
function &singleton($name,$sessionname) {
static $instance;
if (!isset($instance)) {
$instance = new Auth($name,$sessionname);
}
return $instance;
}
function Auth($name,$sessionname)
{
$this -> _sessionname = $sessionname;
$this -> name = $name;
$this -> login_time = time();
}
function &knock($name,$prefix = null)
{
if(empty($prefix)) $prefix = AUTH_PREFIX;
$session_name = $prefix.$name;
if(empty($_SESSION[$session_name]))
{
$auth = false;
$redir = $_SERVER['REQUEST_URI'];
Auth::_gologin($name,$redir);
}else
{
$auth = Auth::singleton($name,$session_name);
}
return $auth;
}
function &_gologin($name,$redir = null)
{
$_AUTH = Auth::_loadConfig();
if(key_exists($name,$_AUTH['CONFIG']))
{
$action = $_AUTH['CONFIG'][$name]['login'];
if(empty($redir)&&!empty($_AUTH['CONFIG'][$name]['door']))
{
$redir = $_AUTH['CONFIG'][$name]['door'];
}
Auth::_forward("$action?name=$name&redir=$redir");
}
}
function &_loadConfig()
{
global $_AUTH;
if(empty($_AUTH))
$_AUTH['CONFIG'] = &PEAR::getStaticProperty('Auth','options');
return $_AUTH;
}
function &_forward($url)
{
?>
<SCRIPT>
window.location.replace('<?=$url?>');
</SCRIPT>
<?
die;
}
function &login($get,$post){
$_AUTH = Auth::_loadConfig();
if(
!empty($get['name'])
&&key_exists($get['name'],$_AUTH['CONFIG'])
) // if ()
{
$name = $get['name'];
if(!empty($get['redir']))
{
$redir = $get['redir'];
}else
{
$redir = './';
}
$action = $_AUTH['CONFIG'][$name]['login'];
if(
!empty($post['action'])
&&$post['action'] == 'login'
&&!empty($post['username'])
&&!empty($post['password'])
) // if ()
{
$username = $post['username'];
$password = $post['password'];
$do_class = $_AUTH['CONFIG'][$name]['DO_class'];
$do_user = $_AUTH['CONFIG'][$name]['DO_userfield'];
$do_pass = $_AUTH['CONFIG'][$name]['DO_passfield'];
$do = DB_DataObject::staticGet($do_class,$do_user,$username);
if(!empty($do)){
//var_dump($do -> $do_pass);
if(md5($password) == $do -> $do_pass)
{
if(empty($prefix)) $prefix = AUTH_PREFIX;
$session_name = $prefix.$name;
$_SESSION[$session_name] =
Auth::singleton($name,$session_name);
Auth::_forward($redir);
}else {
Auth::_forward("$action?name=$name&redir=$redir");
}
}
}else{
$s = new mSmarty();
$s -> assign('auth_name',$name);
$s -> assign('auth_redir',$redir);
$s -> display($_AUTH['CONFIG'][$name]['login_template']);
die;
}
}
}
function &logout($name)
{
if(empty($prefix)) $prefix = AUTH_PREFIX;
$session_name = $prefix.$name;
if(!empty($_SESSION[$session_name])) {
$_SESSION[$session_name] = null;
$_AUTH = Auth::_loadConfig();
if(
key_exists($name,$_AUTH['CONFIG'])
&&!empty($_AUTH['CONFIG'][$name]['logout_to'])
) // if ()
{
$logout = $_AUTH['CONFIG'][$name]['logout_to'];
Auth::_forward($logout);
}
}else {
Auth::_forward('./');
}
}
}
?>
ini file:
[admin]
login=login.php
login_template=admin/login.htm
logout=logout.php
logout_to=t.php
DO_class = DataObjects_Config
DO_userfield = admin_user
DO_passfield = admin_pass
and the setup code:
...
require_once('Auth.php');
$Auth_options = &PEAR::getStaticProperty('Auth','options');
$config = parse_ini_file(WEBDOC_PATH.'/auth.ini',true);
$Auth_options = $config;
...
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php