Thema Sessions
Verfasst: 08.10.2002 13:22
Hi Leutz,
ich wollte mich mal etwas näher mit dem Thema Sessions beschäftigen, da manchmal Cookies auf fremden Rechnern stark eingeschränkt sind. Aber irgendwie komme ich nicht weiter. Ich habe ein Lib zum Thema Sessions gefunden, ich bin mal so frech und poste die hier. Was ich nämlich leider gar nicht verstehe, ist wie ich die nutzen kann? Was muss ich machen, um diese Lib in mein Script einzubauen? Und wie kann man prüfen, ob Cookies genommen werden oder nicht?
Ich bin nämlich noch Anfänger in Sachen PHP und arbeite mich so langsam ein.
Hier der Code:
Worum geht es mir genau? Ich habe auf meiner Website einen Admin-Bereich, die Login-Daten werden im Cookie gespeichert. Anhand des gespeicherten Usernamen werden die Rechte aus der MySQL-DB abgefragt. Ganz klassisch also
Nun arbeite ich hin und wieder an fremden Rechnern, die eine sehr hohe Sicherheitseinstellung haben, an der ich keinerlei Änderungen vornehmen kann und wo gar keine Cookies gespeichert werden. Damit bekomme ich keinen Zugriff. Beim phpBB funktioniert das ja trotzdem, weil auch eine Session-Nutzung eingebaut ist und das möchte ich nun gern auch erreichen.
Danke für Eure Hilfe!
Frank-Andre
ich wollte mich mal etwas näher mit dem Thema Sessions beschäftigen, da manchmal Cookies auf fremden Rechnern stark eingeschränkt sind. Aber irgendwie komme ich nicht weiter. Ich habe ein Lib zum Thema Sessions gefunden, ich bin mal so frech und poste die hier. Was ich nämlich leider gar nicht verstehe, ist wie ich die nutzen kann? Was muss ich machen, um diese Lib in mein Script einzubauen? Und wie kann man prüfen, ob Cookies genommen werden oder nicht?
Ich bin nämlich noch Anfänger in Sachen PHP und arbeite mich so langsam ein.
Hier der Code:
Code: Alles auswählen
<?php
// +--------------------------------------------------------------------------+
// | dbSessions version 0.1.2 - 2002/02/15 |
// +--------------------------------------------------------------------------+
// | Copyright (c) 2000-2001 The phpHeaven-team |
// +--------------------------------------------------------------------------+
// | License: GNU/GPL - http://www.gnu.org/copyleft/gpl.html |
// +--------------------------------------------------------------------------+
// | Library that allows to use sessions with any version of PHP, |
// | with many storage abilities |
// | |
// | usage: - include this library in your files before any call to |
// | function 'session_start()' |
// | - create a table with 3 fields like the following : |
// | CREATE TABLE table_name |
// | ( |
// | id CHAR(32) NOT NULL PRIMARY KEY, |
// | last INTEGER NOT NULL, |
// | vars TEXT |
// | ); |
// | - configure database access with constants at the beginning |
// | - PHP3 users, remember to call 'session_save()' function at |
// | the end of any script that uses sessions |
// | - PHP4 users, verify that the 'session.save_handler' directive |
// | of your 'php.ini' file is set to 'user' |
// | |
// | required: - PHP |
// | - dbMysql, database abstraction library available on phpHeaven |
// | |
// | to do: - use PEAR DB |
// | |
// | changes: |
// | version 0.1.2 - 2002/02/15 |
// | Nicolas Hoizey |
// | - bugfix: didn't work when using dbMysql with a fetchmode |
// | different of MYSQL_ASSOC |
// | - bugfix: replaced $var by $GLOBALS[$var] in session_register|
// | version 0.1.1 - 2001/07/16 |
// | Benjamin Sonntag |
// | - bugfix: 'data' replaced by 'vars' in table definition to |
// | avoid problem with old versions of MySQL in which 'data' |
// | is a restricted keyword |
// | - bugfix: now tests for registered variables in session |
// | before trying to use any |
// | Nicolas Hoizey |
// | - change: added a return in PHP4's 'session_save()' function |
// | - PEAR style header |
// +--------------------------------------------------------------------------+
// | Last release available on phpHeaven: |
// | <a href="http://www.phpheaven.net/resources/libraries/dbSessions/" target="_blank">http://www.phpheaven.net/resources/...ies/dbSessions/</a> |
// | |
// | Authors: Nicolas Hoizey <nhoizey@phpheaven.net> |
// | Benjamin Sonntag <benjamin@octopuce.com> |
// +--------------------------------------------------------------------------+
if(!defined('_LIB_DBSESSIONS_LOADED'))
{
define('_LIB_DBSESSIONS_LOADED', true);
// ######################################################
// ##### Manual configuration needed ####################
// ######################################################
// Define database parameters
define('_LIB_DBSESSIONS_DBHOST', 'database_host');
define('_LIB_DBSESSIONS_DBNAME', 'database_name');
define('_LIB_DBSESSIONS_DBUSER', 'database_user');
define('_LIB_DBSESSIONS_DBPASS', 'database_user_password');
define('_LIB_DBSESSIONS_TABLE', 'table_name');
if(floor(phpversion()) < 4) {
// Session life time in seconds (1 hour by default)
define('_LIB_DBSESSIONS_LIFETIME', 60*60);
// Garbage collector probability (1 by default, always)
define('_LIB_DBSESSIONS_GC_PROBABILITY', 1);
// ######################################################
// #### End of manual configuration #####################
// ######################################################
} else {
// Get parameters from configuration file 'php.ini'
// Session life time
define('_LIB_DBSESSIONS_LIFETIME', get_cfg_var('session.gc_maxlifetime'));
// Garbage collector probability
define('_LIB_DBSESSIONS_GC_PROBABILITY', get_cfg_var('session.gc_probability'));
}
// includes database abstraction class
define('_DBMYSQL_FETCH_MODE', MYSQL_ASSOC);
require 'db.lib.php';
// new database handler
$sessionDbLink = new DB(_LIB_DBSESSIONS_DBHOST, _LIB_DBSESSIONS_DBNAME, _LIB_DBSESSIONS_DBUSER, _LIB_DBSESSIONS_DBPASS);
// random initialization
srand((double)microtime()*1000000);
if(floor(phpversion()) < 4) {
// ######################################################
// ##### Code for PHP3 ##################################
// ######################################################
function session_start()
{
global $sessionDbLink;
if(isset($GLOBALS['PHPSESSID'])) {
define('PHPSESSID', $GLOBALS['PHPSESSID']);
if($serialized = $sessionDbLink->queryOneRecord("SELECT vars FROM "._LIB_DBSESSIONS_TABLE." WHERE id = '".PHPSESSID."'")) {
$data = unserialize(stripslashes($serialized['vars']));
if (is_array($data)) {
$GLOBALS[] = $data;
while(list($key, $value) = each($data)) {
$GLOBALS['phpSessionsVars'][$key] = $key;
}
}
}
} else {
define('PHPSESSID', uniqid('dbSessions'.time()));
$GLOBALS['phpSessionsVars'] = array();
}
setcookie('PHPSESSID', PHPSESSID, time() + _LIB_DBSESSIONS_LIFETIME);
// garbage collection
if(rand() <= _LIB_DBSESSIONS_GC_PROBABILITY) {
$sessionDbLink->query("DELETE FROM "._LIB_DBSESSIONS_TABLE." WHERE last < ".(time() - _LIB_DBSESSIONS_LIFETIME));
}
}
function session_id()
{
return PHPSESSID;
}
function session_register($var)
{
if(!isset($GLOBALS['phpSessionsVars'][$var])) {
$GLOBALS['phpSessionsVars'][$var] = $GLOBALS[$var];
}
}
function session_unregister($var)
{
if(isset($GLOBALS['phpSessionsVars'][$var])) {
$GLOBALS['phpSessionsVars'][$var] = '';
}
}
function session_is_registered($var)
{
return isset($GLOBALS['phpSessionsVars'][$var]);
}
function session_destroy()
{
global $sessionDbLink;
setcookie('PHPSESSID', '');
$sessionDbLink->query("DELETE FROM "._LIB_DBSESSIONS_TABLE." WHERE id = '".PHPSESSID."'");
unset($GLOBALS['phpSessionsVars']);
unset($GLOBALS['PHPSESSID']);
}
// just needed for PHP3
function session_save()
{
global $sessionDbLink;
$data = array();
if (is_array($GLOBALS['phpSessionsVars'])) {
while(list($key, $key2) = each($GLOBALS['phpSessionsVars'])) {
if($key2 != '') $data[$key] = $GLOBALS[$key];
}
}
$serialized = addslashes(serialize($data));
$nb = $sessionDbLink->queryOneRecord("SELECT COUNT(*) AS nb FROM "._LIB_DBSESSIONS_TABLE." WHERE id = '".PHPSESSID."'");
$nb = $nb['nb'];
if ($nb == 0) {
$sessionDbLink->query("INSERT INTO "._LIB_DBSESSIONS_TABLE." (id, last, vars) VALUES ('".PHPSESSID."', ".time().", '".$serialized."')");
} else {
$sessionDbLink->query("UPDATE "._LIB_DBSESSIONS_TABLE." SET vars = '".$serialized."', last = ".time()." WHERE id = '".PHPSESSID."'");
}
return true;
}
} elseif(get_cfg_var('session.save_handler') == 'user') {
// ######################################################
// ##### Code for PHP4 ##################################
// ######################################################
function sessionOpen($savePath, $sessionName)
{
return true;
}
function sessionClose()
{
return true;
}
function sessionRead($id)
{
global $sessionDbLink;
$id = addslashes($id);
$data = $sessionDbLink->queryOneRecord("SELECT vars FROM "._LIB_DBSESSIONS_TABLE." WHERE id = '".$id."'");
$data = $data['vars'];
if(strlen($data) > 0) {
return $data;
} else {
return false;
}
}
function sessionWrite($id, $data)
{
global $sessionDbLink;
$id = addslashes($id);
$data = addslashes($data);
$nb = $sessionDbLink->queryOneRecord("SELECT COUNT(*) AS nb FROM "._LIB_DBSESSIONS_TABLE." WHERE id = '".$id."'");
$nb = $nb['nb'];
if ($nb == 0) {
$sessionDbLink->query("INSERT INTO "._LIB_DBSESSIONS_TABLE." (id, last, vars) VALUES ('$id', ".time().", '$data')");
} else {
$sessionDbLink->query("UPDATE "._LIB_DBSESSIONS_TABLE." SET vars = '$data', last = ".time()." WHERE id = '$id'");
}
return true;
}
function sessionDestroy($id)
{
global $sessionDbLink;
$id = addslashes($id);
$ret = $sessionDbLink->query("DELETE FROM "._LIB_DBSESSIONS_TABLE." WHERE id = '".$id."'");
return $ret;
}
function sessionGarbageCollector($sessionLifeTime)
{
global $sessionDbLink;
$ret = $sessionDbLink->query("DELETE FROM "._LIB_DBSESSIONS_TABLE." WHERE last < ".(time() - _LIB_DBSESSIONS_LIFETIME));
return $ret;
}
function session_save()
{
// just a trick to allow seamless migration from PHP3 to PHP4
return true;
}
session_set_save_handler('sessionOpen', 'sessionClose', 'sessionRead', 'sessionWrite', 'sessionDestroy', 'sessionGarbageCollector' );
}
}
?>

Danke für Eure Hilfe!
Frank-Andre