Эта тема на forum.dklab.ru


Rumata: Простой модуль работы с сессиями, перенаправлением и авторизации

class Redirector
{

function &getStaticProperty($name)
{
static $properties;
return $properties[$name];
}

function redirectPage($name, $page=NULL)
{
$result =& Redirector::getStaticProperty($name);
if (is_string($page)) {
$result[$name] = $page;
}
return $result[$name];
}

function afterLogin($session=array())
{
Redirector::setSession($session);
$back = @$_SESSION['back'];
unset($_SESSION['back']);
header('Location: ' . ( $back ? $back : Redirector::redirectPage('index') ));
exit;
}

function beforeLogin()
{
$_SESSION['back'] = $_SERVER['REQUEST_URI'];
header('Location: ' . Redirector::redirectPage('login'));
exit;
}

function setSession($session=array())
{
if (is_null($session)) {
unset($_SESSION);
return;
}
if ( is_array($session) ) {
foreach ($session as $k => $v) {
$_SESSION[$k] = $v;
}
}
}

function startSession($session=array())
{
Redirector::setSession($session);
session_start();
}

function stopSession()
{
Redirector::setSession(null);
session_destroy();
header('Location: ' . Redirector::redirectPage('index'));
exit;
}

}


примеры работы

// common.php
include 'Redirector.php';
Redirector::redirectPage('index', 'index.php');
Redirector::redirectPage('login', 'login.php');
Redirector::startSession();

// profile.php
include 'common.php';
if (!@$_SESSION['user_logged_in']) {
Redirector::beforeLogin();
}

// login.php
include 'common.php';
if ($_GET['action'] == 'exit') {
Redirector::stopSession();
}

if (правильный_логин($_POST['login']) && правильный_пароль($_POST['password']) {
Redirector::afterLogin(array('user_logged_in' => true));
}

Эта тема на forum.dklab.ru