Hallo liebe Community,
ich habe etwas überlegt ob ich meinen Fehler hier mal poste, auf der Hoffnung das einer meinen Denkfehler bemerkt.
Ich habe eine Session-Klasse geschrieben:
PHP
<?php
class Sessions extends NGL
{
public function __construct()
{
parent::__construct();
}
public function getSession()
{
$db = new Database();
if(isset($_SESSION['sessionid']))
{
$sessionid = $_SESSION['sessionid'];
} else {
$sessionid = 999;
}
$db->Query("SELECT * FROM `ucp_sessions` WHERE `ucp_sessions`.`sessionid`=:sessionid");
$db->bind(':sessionid', $sessionid);
$db->execute();
if($db->rowCount() == 0) {
//create
}
return $db->fetch();
}
public function ExistSession()
{
$db = new Database();
//self::$sessIP = $_SERVER['REMOTE_ADDR'];
if(isset($_SESSION['sessionid']))
{
$sessionid = $_SESSION['sessionid'];
} else {
$sessionid = 999;
}
$db->Query("SELECT * FROM `ucp_sessions` WHERE `ucp_sessions`.`sessionid`=:sessionid");
$db->bind(':sessionid', $sessionid);
$db->execute();
if($db->rowCount() == 0) {
return 0;
} else {
return 1;
}
}
//login wird nur abgerufen wenn update auf 1 ist
//bei false gilt der Besucher ist nicht eingeloggt, ebenso wird einlogguser mit dem richtigen wert wieder gegeben
public function createSession($update = 0, $login = false, $einloguser = NULL) //0 = Neu erstellen, 1= Bestehende Session überschreiben
{
//User als nicht eingeloggt deklarieren
self::$sessLogin = false;
//Username ist am Anfang NULL
self::$sessUser = NULL;
$_SESSION['user'] = self::$sessUser;
//Sessionid
//$newses = 'NGL_'.rand(111111, 99999999);
//Zeit wo Session erstellt wurde
self::$sessTime = time();
//Wann die Session abläuft (Üblicherweise nach 30 Min)
self::$sessExpire = time()+60*30;
//Zeit der letzten Aktion vom user
self::$sessLastAction = time();
//Auf welche Seie der Benutzer gerade ist
self::$sessPage = 'http://'.$_SERVER['HTTP_HOST'].'/'.$_SERVER['PHP_SELF'];
//GET oder POST Method
self::$sessRequest = $_SERVER['REQUEST_METHOD'];
//Browser vom benutzer
self::$sessUserAgent = $_SERVER["HTTP_USER_AGENT"];
//Anzahl der Seitenaufrufe
self::$seePageCount = 1;
//IP Adresse vom Benutzer
self::$sessIP = $_SERVER['REMOTE_ADDR'];
if($update == 0) {
$_SESSION['sessionid'] = rand(111111,99999999);
self::$newSessionID = $_SESSION['sessionid'];
try
{
if($this->ExistSession())
{
$this->createSession(1, false);
} else {
self::$Database->Query("INSERT INTO `samp`.`ucp_sessions` (`ucp_sessions`.`login`, `ucp_sessions`.`user`, `ucp_sessions`.`sessionid`, `ucp_sessions`.`time`, `ucp_sessions`.`expire`, `ucp_sessions`.`lastaction`, `ucp_sessions`.`page`, `ucp_sessions`.`requestmethod`, `ucp_sessions`.`useragent`, `ucp_sessions`.`pagecount`, `ucp_sessions`.`ip`) VALUES
(:login, :user, :sessionid, :time, :expire, :lastaction, :page, :requestmethod, :useragent, :pagecount, :ip)");
self::$Database->bind(':login', self::$sessLogin);
self::$Database->bind(':user', self::$sessUser);
self::$Database->bind(':sessionid', self::$newSessionID);
self::$Database->bind(':time', self::$sessTime);
self::$Database->bind(':expire', self::$sessExpire);
self::$Database->bind(':lastaction', self::$sessLastAction);
self::$Database->bind(':page', self::$sessPage);
self::$Database->bind(':requestmethod', self::$sessRequest);
self::$Database->bind(':useragent', self::$sessUserAgent);
self::$Database->bind(':pagecount', self::$seePageCount);
self::$Database->bind(':ip', self::$sessIP);
self::$Database->execute();
}
} catch (PDOException $e)
{
$this->Extest($e->getMessage(), $e->getCode(), $e->getLine(), $e->getFile(), $e->getTrace(), $e->getTraceAsString(), $e->getPrevious());
}
//self::$Database->errorInfo();
} elseif ($update==1) {
if($this->ExistSession()) {
if($login==false) {
$l = 0;
} elseif ($login==true)
{
$l = 1;
} else {
$l = NULL;
trigger_error("Der Parameter <i>login</i> darf in NGL::createSession() nur true oder false beinhalten", E_USER_ERROR);
}
self::$Database->Query("UPDATE `ucp_sessions` SET `ucp_sessions`.`login`=:login, `ucp_sessions`.`user`=:user, `ucp_sessions`.`expire`=:expire, `ucp_sessions`.`lastaction`=:lastaction, `ucp_sessions`.`page`=:page, `ucp_sessions`.`requestmethod`=:requestmethod, `ucp_sessions`.`useragent`=:useragent, `ucp_sessions`.`pagecount`=:pagecount WHERE `ucp_sessions`.`ip`=:ip)");
self::$Database->bind(':login', $l);
self::$Database->bind(':user', $einloguser);
self::$Database->bind(':sessionid', $this->getSession()->sessionid);
self::$Database->bind(':expire', self::$sessExpire);
self::$Database->bind(':lastaction', self::$sessLastAction);
self::$Database->bind(':page', self::$sessPage);
self::$Database->bind(':requestmethod', self::$sessRequest);
self::$Database->bind(':useragent', self::$sessUserAgent);
self::$Database->bind(':pagecount', $this->getSession()->pagecount+1);
self::$Database->bind(':ip', self::$sessIP);
self::$Database->execute();
} else {
$this->createSession(0, false);
}
} else {
trigger_error("Der Parameter <i>update</i> darf in NGL::createSession() nur true oder false beinhalten", E_USER_ERROR);
}
}
function __autoload()
{
parent::__autoload();
}
}
?>
Alles anzeigen
Das Script soll jeden Besucher eine Session verpassen....sofern der Besucher schon eine Session hat un diese schon in der Datenbank existiert, soll die bestehende Session überschrieben werden.
Aber es wird nach jeden Reload auf der Seite eine neue Session angelegt was es ja nicht darf.
Ich glaube ich habe einen Denkfehler drin.
Hoffentlich kann mir einer helfen.
Liebe Grüße
palwal
EDIT:
Das ganze wird so aufgerufen: