that's some of my scripts I once used. have a look at it. it won't run instantly, since I just took them from a collection of classes
hth /Dorgon
the most interesting part will be:
// initialize global session object session_start();
if (isset($_SESSION)) { // php versions >= 4.1.0
if (!isset($_SESSION['userSess'])) {
$_SESSION['userSess'] = new UserSession();
$sess =& $_SESSION['userSess'];
$sess->init();
}
else {
$sess =& $_SESSION['userSess'];
$_SESSION['userSess']->reuse();
}
}
else { // for downward compatibility to old php version (< 4.1.0)
if (!isset($userSess)) {
$userSess = new UserSession();
$sess =& $userSess;
$userSess->init();
session_register("userSess");
}
else {
$sess =& $userSess;
$userSess->reuse();
session_register("userSess");
}
}Lee Herron Qcs wrote:
Does anyone know of a working snippet to manage sessions using any combination of Register_Global and pre/post php v4.1?
Would love to look at some examples ..
<?php /** class Session * * This abstract class provides additional session handling functions beside * PHP4's already built-in routines for session treatment. * functions reuseAction(), loginAction(&$user), loginFormAction(), logoutAction() * have to be implemented by child classes! * All functions are commented below. * * @author [EMAIL PROTECTED] * @version $Id: $ * */
define("__SESSION_CLASS", 1);
class Session {
var $userID;
var $userData;
var $msg;
var $params;
/**
* after starting a new native php4-session,
* the Session object should be created
*/
function Session() {
$this->params = array();
$this->msg = "";
$this->userID = null;
$this->userData = array();
}
/**
* reuse() should be called on each page request within session scope
* get-parameters which should be stored in the session can be submitted
* by a single get-variable: params=KEY1_VALUE1,KEY2_VALUE2,KEY3_VALUE3...
* ater that the login action is called and
* finally the proper reuseAction() function of the child class is called
*/
function reuse() {
if (isset($GLOBALS['_GET']['params'])) {
$doubles = explode(".",$GLOBALS['_GET']['params']);
foreach ($doubles as $par) {
$par = explode("_",$par);
$this->params[$par[0]] = $par[1];
}
}
$this->doLogin();
$this->reuseAction();
}
/**
* login action
* proper functions loginAction(), log
*/
function doLogin() {
if (isset($GLOBALS['_GET']['dologin'])) {
switch($GLOBALS['_GET']['dologin']) {
case "form":
$this->loginFormAction();
break;
case "login":
if ($GLOBALS['_POST']['user_login'] == "") {
$this->msg = "Please enter your login
name.";
return false;
}
else {
if(!defined("__USEROBJECT_CLASS"))
include $GLOBALS['conf']->get("dir_objects")."userobject.inc";
$user = new UserObject();
$user->loadUserByLogin($GLOBALS['_POST']['user_login']);
if
($user->checkPwd($GLOBALS['_POST']['user_password'])) {
if
($this->loginAction(&$user)) {
$this->userData =
$user->getRecord();
$user->unload();
$this->userID =
$this->userData['user_id'];
$this->params['last_selflogin_time'] = $this->userData['last_login_time'];
$this->params['last_selflogin_host'] = $this->userData['last_login_host'];
$user->loadLastAdmin();
$this->params['last_userlogin_name'] = $user->get("user_first_name")."
".$user->get("user_last_name");
$this->params['last_userlogin_time'] = $user->get("last_login_time");
$this->params['last_userlogin_host'] = $user->get("last_login_host");
$user->update($this->userID, Array("last_login_time" => "NOW()", "last_login_host" =>
"'".$GLOBALS['_SERVER']['REMOTE_ADDR']."'"), $foo);
$user->unload();
$grant = true;
}
else $grant = false;
}
else $grant = false;
if (!$grant) $this->msg = "Login
failed. Please retry.";
$user->unload();
return $grant;
}
break;
case "logout":
$this->userID = null;
$this->userData = array();
$this->params = array();
$this->logoutAction();
return true;
break;
}
}
}
function getSessionID() {
return session_id();
}
function loggedOn() {
if (isset($this->userID)) return true;
else return false;
}
function catchMsg() {
$msg = $this->msg;
$this->msg = "";
return $msg;
}
// adapter functions
function reuseAction() {} // must be implemented, called
on session-reuse (for shop function, etc.)
function loginAction(&$user) {} // must be implemented, called after
successful login, $user is given to function
// the loginAction() must return true/false -> on false login is denied
function logoutAction() {} // must be implemented, called
after logout
function loginFormAction() {} // must be implemented, called when
login form is posted
}
?>
<?php
/** class UserSession
*
* extends class Session with page parameter and shop object
* @author [EMAIL PROTECTED]
* @version $Id: $
*/
if(!defined("__SESSION_CLASS")) include $conf->get("dir_maininc")."session.inc";
if(!defined("__VISITORTRACKER_CLASS")) include
$conf->get("dir_frontinc")."visitortracker.inc";
if(!defined("__SHOP_CLASS")) include $conf->get("dir_frontinc")."shop.inc";
define("__USERSESSION_CLASS", 1);
class UserSession extends Session {
var $shop;
var $page;
function UserSession() {
$this->Session();
}
// after starting a new native php4-session, the UserSession object should be
created and init() called
function init() {
$this->page = "homepage";
$this->shop = new Shop();
VisitorTracker::trackVisit($this->getSessionID());
}
// called when session is re-used
function reuseAction() {
if (isset($GLOBALS['_GET']['page'])) $this->page =
$GLOBALS['_GET']['page'];
if ($this->page != "login") $this->params['last_page'] = $this->page;
if (isset($GLOBALS['_GET']['doshop']) ||
isset($this->params['doshop'])) {
if ($this->loggedOn()) {
$this->shop->doAction($this->params);
unset($this->params['doshop']);
unset($this->params['last_doshop']);
$this->page = "shop";
}
else {
if (isset($GLOBALS['_GET']['song']))
$this->params['song'] = $GLOBALS['_GET']['song'];
if (isset($GLOBALS['_GET']['doshop']))
$this->params['last_doshop'] = $GLOBALS['_GET']['doshop'];
if (isset($this->params['last_page'])) $this->page =
$this->params['last_page'];
$this->msg = "Please login first:";
$this->page = "login";
}
}
echo "<!-- userID: ".$this->userID." -->";
VisitorTracker::trackView($this->getSessionID(), $this->page,
$this->userID);
}
function loginAction(&$user) {
if (isset($this->params['last_page'])) $this->page =
$this->params['last_page'];
if (isset($this->params['last_doshop'])) $this->params['doshop'] =
$this->params['last_doshop'];
else $this->page = "homepage";
// guest user login:
if (isset($GLOBALS['_POST']['guest_name']))
$this->params['guest_name'] = $GLOBALS['_POST']['guest_name'];
if (isset($GLOBALS['_POST']['guest_email'])) {
$this->params['guest_email'] =
$GLOBALS['_POST']['guest_email'];
if(!defined("__GUESTOBJECT_CLASS")) include
$GLOBALS['conf']->get("dir_objects")."guestobject.inc";
$guests = new GuestObject();
$guests->insert(Array("guest_name" =>
"'".$GLOBALS['_POST']['guest_name']."'", "guest_email" =>
"'".$GLOBALS['_POST']['guest_email']."'"), $foo);
}
$this->shop->init();
return true;
}
function logoutAction() {
$this->page = "homepage";
}
function loginFormAction() {
$this->page = "login";
}
}
// initialize global session object
session_start();
if (isset($_SESSION)) { // php versions >= 4.1.0
if (!isset($_SESSION['userSess'])) {
$_SESSION['userSess'] = new UserSession();
$sess =& $_SESSION['userSess'];
$sess->init();
}
else {
$sess =& $_SESSION['userSess'];
$_SESSION['userSess']->reuse();
}
}
else { // for downward compatibility to old php version (< 4.1.0)
if (!isset($userSess)) {
$userSess = new UserSession();
$sess =& $userSess;
$userSess->init();
session_register("userSess");
}
else {
$sess =& $userSess;
$userSess->reuse();
session_register("userSess");
}
}
?>
-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php

