Witam wszystkich
Wczoraj naszło mnie żeby przepisać klasę kwiatka do PHP5 z kilkoma modyfikacjami(np. uzycie adodb do połączenia z bazą). Wszystko szło jak należy do momentu kiedy miałem użyć tego co stworzyłem. Zastosowanie klasy nie przynosi rezultatów. Sesje nie są zapisywane - jedyne co mi wywala php, to taki warning:
Kod
Warning: Unknown: Your script possibly relies on a session side-effect which existed until php 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
Pierwszy raz widzę coś takiego - ktoś ma pomysł co może powodować takie ostrzeżenie?
Oto kod klasy handlera:
<?php
class SessionHandler
{
/**
* Dane konfiguracyjne serwera bazy danych - do polączenia.
* @var array $dbConfig - Ustawiane przez konstruktor @see __construct();
* @access private
*/
/**
* Tabela z danymi sesyjnymi
* @var string $sessionTable - Ustawiana przez konstruktor @see __construct();
* @access private
*/
/**
* Zmienna przechowujaca czas zycia sesji
* @var int $sessionLifetime - Ustawiana przez konstruktor @see __construct();
* @access private
*/
private $sessionLifetime;
/**
* Zmienna przechowujaca instancje abstrakcji bazy, posluzy do komunikacji z
baza.
* @var Creole $dbConnection
* @access private
*/
/**
* Konstruktor klasy SessionHandler
* Przygotowanie polaczenia ze baza danych i okreslenie parametrow wstepnych
* @param array $dbConfig - Dane konfiguracyjne bazy.
* @param string $sessionTable - nazwa tabeli przechowującej dane sesji.
* @param int $sessionLifetime - Maksymalny czas istnienia nieaktywnej sesji.
* @return void
* @access public
*/
public function __construct($dbConfig = false, $sessionTable = false, $sessionLifetime = 0)
{
if($dbConfig AND $sessionTable)
{
/*
* Dane do polaczenia z baza danych.
*/
$this->dbConfig['type'] = $dbConfig['type'];
$this->dbConfig['host'] = $dbConfig['host'];
$this->dbConfig['username'] = $dbConfig['user'];
$this->dbConfig['password'] = $dbConfig['password'];
$this->dbConfig['database'] = $dbConfig['database'];
/*
* Pozostale dane konfiguracyjne - nazwa tabeli przechowujacej dane sesji
* oraz czas okreslajcy zycie sesji.
*/
$this->sessionTable = $sessionTable;
$this->sessionLifetime = $sessionLifetime;
/*
* Stala przechowujaca sciezke do abstrakcji DB
*/
define('DB_ABSTRACT_PATH', 'adodb/adodb.inc.php'); }
else
{
// error_handler();
}
}
/**
* Nawiązywanie połączenia bazodanowego
* @return bool
* @access private
*/
private function dbConnect()
{
if(require_once(DB_ABSTRACT_PATH))
{
$this->dbConnection = &ADONewConnection($this->dbConfig['type']);
$this->dbConnection->PConnect($this->dbConfig['host'], $this->dbConfig['username'],
$this->dbConfig['password'], $this->dbConfig['database']);
return true;
}
else
{
return false;
}
}
/**
* Inicjalizacja sesji
* @param string $sesion_savepath Lokalizacja zapisu sesji
* @param string $session_name Nazwa sesji
* @return bool
* @access private
*/
public function _open($session_savepath, $session_name)
{
if($this->dbConnect())
{
return true;
}
}
/**
* Zakończenie sesji
* @return bool
* @access private
*/
public function _close()
{
if($this->_gc())
{
return true;
}
else
{
return false;
}
}
/**
* Odczytywanie danych sesyjnych
* @param string $sessionID - Identyfikator sesji
* @return mixed
* @access public
*/
public function _read($sessionID)
{
//$stmt = $this->dbConnection->Prepare('SELECT sessionValue FROM ? WHERE sessionID = ?');
//$rs = $this->dbConnection->Execute($stmt,array($this->sessionTable, $sessionID));
if($array = $this->dbConnection->GetAssoc(\"SELECT sessionValue FROM \".$this->sessionTable.\" WHERE sessionID = \".$sessionID))
{
return($array['sessionValue']);
}
else
{
return false;
}
}
/**
* Zapisywanie danych sesji
* @param string $sessionID Identyfikator sesji
* @param string $sessionValue Wartości sesyjne
* @return bool
* @access public
*/
public function _write($sessionID, $sessionValue)
{
$stmt = $this->dbConnection->Prepare('INSERT INTO ? VALUES(?,?,?,?)');
if($this->dbConnection->Execute($stmt,array($this->sessionTable, $sessionID, time(), time(), $sessionValue))) {
return true;
}
else
{
$stmt = $this->dbConnection->Prepare('UPDATE ? SET sessionTime = ?, sessionValue = ? WHERE sessionID = ?');
if($this->dbConnection->Execute($stmt,array($this->sessionTable, time(), $sessionValue, $sessionID))) {
return true;
}
else
{
return false;
}
}
}
/**
* Usuwanie danych sesji
* @param string $sessionID - Identyfikator sesji
* @return bool
* @access public
*/
function _destroy($sessionID)
{
$stmt = $this->dbConnection->Prepare('DELETE FROM ? WHERE sessionID = ?');
if($this->dbConnection->Execute($stmt,array($this->sessionTable, $sessionID))) {
return true;
}
else
{
return false;
}
}
/**
* \"Garbage collection\" - Usuwanie niepotrzebnych danych sesji
* @return bool
* @access public
*/
function _gc()
{
$sessionDeletetime = time() - $this->sessionLifetime; $stmt = $this->dbConnection->Prepare('DELETE FROM ? WHERE sessionTime < ?');
if($this->dbConnection->Execute($stmt,array($this->sessionTable, $sessionDeletetime))) {
return true;
}
else
{
return false;
}
}
}
?>
a to sposób użycia:
<?php
include(\"SessionHandler.class.php\");
$dupa = 15;
$db_config['type'] = 'mysql';
$db_config['host'] = 'host';
$db_config['user']= 'user';
$db_config['password'] = 'pass';
$db_config['datebase'] = 'db';
// Tworzenie obiektu zarządzania sesją
$session = new SessionHandler($db_config, 'sessions', 300);
// Zastępowanie domyślnych funkcji metodami sesji
array(&$session, '_close'), array(&$session, '_read'), array(&$session, '_write'), array(&$session, '_destroy'), );
if($_GET['action'] == 'check')
{
}
?>
<a href='session.php?action=check'>test</a>
Dodam, że w bazie danych też nie ma żadnych rekordów.
Co o tym myślicie - z góry dzięki za wskazówki.
pozdrawiam
anas