Dodałam komentarze aby ewentualnie można było łatwiej go zrozumieć.
Błąd jaki wywala przeglądarka jest następujący
Fatal error: Using $this when not in object context in D:\www\sesje\CSession.php on line 205
A przecież $this jest poprawnie zdefiniowana...nie qumam
W zasadzie chyba jest napisany dobrze jednak serwer wywala mi błedy..
Kod pliku CSession przedstawiam poniżej prosze o przeanalizowanie i pomoc w znalezieniu błędu
<?php // bezpieczny czas oczekiwania na akcję uzytkownika (w minutach) class CSession { var $sIP; // IP uzytkownika var $tDate; // aktualna data i czas var $sid; // identyfikator sesji var $idSession; // id sesji w bazie // dane zalogowanego uzytkownika var $idUser; // id uzytkownika lub 0 jesli niezalogowany var $tabUser; // tablica z danymi uzytkownika pobrana z bazy // true jesli wystapil blad podczas logowania // (podano zly login lub haslo) var $bLoginError; function CSession() { $this->idUser = 0; // 1. Zarzadzanie sesjami $this->sid = $HTTP_GET_VARS['sid']; if (!$this->sid) { // utworz nowa sesje // (domyslnie przypisana do niezalogowanego uzytkownika) \"INSERT INTO tabSession { sid, sIP, tDate, tLastAction ) VALUES ( '\".$this->sid.\"', '\".$this->sIP.\"', '\".$this->tDate.\"', '\".$this->tDate.\"' )\"); } else { // wczytaj dane sesji z bazy \"SELECT * FROM tabSession WHERE sid='\".addslashes($this->sid).\"' AND bActive=1\"); // jesli brak sesji o danym sid lub sesja nieaktywna exit; } if ($tabSession['sIP']!=$this->sIP) { // Rozny IP odwiedzajacego i sesji, tutaj mozna dodac // przekierowanie na strone z informacja o błedzie $this->logout(PAGE_HOME); } // oblicz maksymalny dopuszczalny czas ostatniej akcji if ($tabSession['tLastAction']<$tDate) { // od ostatniej akcji minelo za duzo czasu - wylogowanie $this->logout(PAGE_TIMEOUT); } $this->idSession = $tabSession['idSession']; // identyfikator uzytkownika przypisanego do tej sesji $this->idUser = $tabSession['idUser']; } // 2. Zazadzanie uzytkownikami if ($this->idUser) { // Jesli do tej sesji przypisany jest uzytkownik // obsluz ewentualnie wylogowanie $this->handleLogout(); // jesli sie nie wylogowal, wczytaj jego dane z bazy \"SELECT * FROM tabUser WHERE idUser=\".$this->idUser); } else { // w przeciwnym wypadku sprawdz czy uzytkownik własnie sie zalogował $this->handleLogin(); } // 3. Aktualizacja danych sesji // inkrementacja licznika zaladowan stron dla tej sesji // oraz uaktualnienie czasu ostatniej akcji \"UPDATE tabSession SET nHits=nHits+1, tLastAction='\".$this->tDate.\"', idUser=\".$this->idSession.\" WHERE idSession=\".$this->idSession); } // obsluga logowania uzytkownika function handleLogin() { // sprawdz czy przeslano metoda POST formularz logowanie if ( ($REQUEST_METHOD=='POST') && ($HTTP_POST_VARS['formname']=='login') ) { // sprawdz czy przeslany login i haslo odpowiadaja // jednemu z uzytkownikow zapisanych w bazie \"SELECT * FROM tabUser WHERE sLogin='\".addslashes($HTTP_POST_VARS['sLogin']).\"' AND sPassword='\".addslashes($HTTP_POST_VARS['sPassword']).\"'\" ); // uzytkownik poprawnie zalogowany // przypisz jego idUser do aktualnej sesji $this->idUser = $this->tabUser['idUser']; WHERE idSession=\".$this->idSession); // przekieruj przegladarke na strone startowa exit; } else { // brak uzytkownika o podanym logonie i hasle $this->bLoginError = true; } } } // obsluga wylogowania na zadanie uzytkownika function handleLogout() { if ($HTTP_GET_VARS['bLogout']) { $this->logout(); } } // wylogowanie uzytkownika function logout($page=PAGE_LOGOUT) { \"UPDATE tabSession SET bActive=0 WHERE idSession=\".$this->idSession); exit; } function makeLink($sPage,$sParam='') { return $sPage.'?sid='.$this->sid.'&'.$sParam; } } // polaczenie z baza mysql function initMysql($sHost,$sUser,$sPassword,$sDatabase) { exit; } ?>
Przedstawiam jeszcze plik index.php który jest potrzebny do sprawdzenia i baze w mysql
<?php require_once \"CSession.php\"; initMysql('localhost', 'root', '', 'baza'); $oSession = new CSession(); if ($oSession->bLoginError) { } ?> <center> <input type=\"hidden\" name=\"formname\" value=\"login\"> Login: <input name=\"slogin\" size=10><br> Hasło: <input type=\"password\" name=\"sPassword\" size=10> <br> <input type=\"submit\" value=\"Zaloguj\"> </form> </center>
CREATE TABLE tabSession ( idSession int NOT NULL AUTO_INCREMENT, idUser int NOT NULL DEFAULT 0, sid char(32), tLastAction timestamp, tDate timestamp, sIP char(15), nHits int NOT NULL DEFAULT 0, bActive tinyint NOT NULL DEFAULT 1, PRIMARY KEY(idSession), KEY(sid(3)) ); CREATE TABLE tabUser ( idUser int NOT NULL AUTO_INCREMENT, sLogin char(16), sPassword char(16), PRIMARY KEY (idUser), KEY(sLogin(3)) ); INSERT INTO tabUser (sLogin,sPassword) VALUES ('admin','haslo');