Hey Leute,
ich habe mir eine eigene Session Klasse geschrieben, die folgendermassen funktioniert:
Der Nutzer bekommt einen Cookie mit der ID 'ID' erstellt der einen 32stelligen Zufalls-String enthält, diese ID wird dann zusammen mit der Nutzerip und den gewünschten Sessiondaten (Account-ID, aktuelle Seite, etc.) in einer Tabelle gespeichert.
Funktioniert wunderbar auf meinem XAMPP zu Hause und auf meinem Testwebspace, wenn ich allerdings von meinem Uni-Netzwerk (oder einem Hotelnetzwerk) darauf zugreifen will, wird mit jedem Seitenaufruf eine neue Session generiert.
Der Browser bekommt den Cookie übermittelt, es scheint an der Rückübermittlung beim Seitenaufruf zu scheitern.
Woran könnte das liegen?
Hier der verantwortliche Auszug aus meiner Klasse:
Grüße & Danke für die Hilfe!
ich habe mir eine eigene Session Klasse geschrieben, die folgendermassen funktioniert:
Der Nutzer bekommt einen Cookie mit der ID 'ID' erstellt der einen 32stelligen Zufalls-String enthält, diese ID wird dann zusammen mit der Nutzerip und den gewünschten Sessiondaten (Account-ID, aktuelle Seite, etc.) in einer Tabelle gespeichert.
Funktioniert wunderbar auf meinem XAMPP zu Hause und auf meinem Testwebspace, wenn ich allerdings von meinem Uni-Netzwerk (oder einem Hotelnetzwerk) darauf zugreifen will, wird mit jedem Seitenaufruf eine neue Session generiert.
Der Browser bekommt den Cookie übermittelt, es scheint an der Rückübermittlung beim Seitenaufruf zu scheitern.
Woran könnte das liegen?
Hier der verantwortliche Auszug aus meiner Klasse:
PHP-Code:
class Session {
public $user = false;
public $lang = 0;
public $langKey;
public $langName;
public $mail;
public $time;
function __construct() {
$this->time = time();
}
function start() {
if(isset($_COOKIE['ID'])) {
$session = sqQuery('SELECT `user`, `language`, `permanent` FROM `session` WHERE `ID`=\'' . sqEsc($_COOKIE['ID']) . '\' AND `IP`=\'' . ip2long($_SERVER['REMOTE_ADDR']) . '\' LIMIT 1;');
if($user = $session->fetch_row()) {
if($user[2]) {
setcookie('ID', $_COOKIE['ID'], $this->time + 259200, '/');
} else {
setcookie('ID', $_COOKIE['ID'], $this->time + 3600, '/');
}
sqQuery('UPDATE `session` SET `time`=\'' . $this->time . '\' WHERE `ID`=\'' . sqEsc($_COOKIE['ID']) . '\' AND `IP`=\'' . ip2long($_SERVER['REMOTE_ADDR']) . '\';');
if($user[0] != null) {
$user = sqQuery('SELECT `ID`, `mail`, `language` FROM `user` WHERE `ID`=' . $user[0] . ';');
if($user = $user->fetch_row()) {
$this->user = $user[0];
$this->mail = $user[1];
$this->lang = $user[2];
} else {
$this->renew();
}
} else {
$this->lang = $user[1];
}
} else {
$this->renew();
}
} else {
$this->renew();
}
$language = sqQuery('SELECT `name`, `key` FROM `language` WHERE `ID`=\'' . $this->lang . '\';');
if($language = $language->fetch_row()) {
$this->langName = $language[0];
$this->langKey = $language[1];
} else {
$this->setLanguage(LANGUAGE);
}
}
#......
//create a new, unique session ID
protected function renew() {
//set language
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$language = sqQuery('SELECT `ID` FROM `language` WHERE `key`=\'' . sqEsc(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)) . '\' LIMIT 1;');
if($language = $language->fetch_row()) {
$language = $language[0];
} else {
$language = LANGUAGE;
}
} else {
$language = LANGUAGE;
}
//find open session id
$ID = rndString();
$session = sqQuery('SELECT `user` FROM `session` WHERE `ID`=\'' . $ID . '\' AND `IP`=\'' . ip2long($_SERVER['REMOTE_ADDR']) . '\' LIMIT 1;');
while($session->num_rows > 0) {
$ID = rndString();
$session = sqQuery('SELECT `user` FROM `session` WHERE `ID`=\'' . $ID . '\' AND `IP`=\'' . ip2long($_SERVER['REMOTE_ADDR']) . '\' LIMIT 1;');
}
sqQuery('INSERT INTO `session` (`ID`, `IP`, `time`, `language`) VALUES (\'' . $ID . '\', \'' . ip2long($_SERVER['REMOTE_ADDR']) . '\', \'' . $this->time . '\', \'' . $language . '\');');
setcookie('ID', $ID, $this->time + 3600, '/');
}
Kommentar