Inhalt der $_SESSION wird nicht richtig gespeichert
MLudwig
- php
Hallo,
nach erfolgloser Suche hoffe ich hier auf Unterstützung.
Ein Login-Script legt eine Session-Datei auf dem Server ab unter:
/var/lib/php/session
Allerdings sind diese inhaltlich falsch.
Abgelegt wird bspw. der Inhalt:
"user|N;"
Es sollte aber an der Stelle von "N" der Name stehen.
Obwohl ich das für wenig aussichtsreich hielt, habe ich dennoch mal in der php.ini den Eintrag session.cache_limiter auf public gesetzt. Ohne Erfolg.
Dass Session richtig gespeichert werden, ist an den Einträgen des Mailservers zu sehen, der sich unter oben genannten Pfad verewigt.
Ich füge mal den Code-Auszug ein.
Das ganze tritt seit einem Serverwechsel auf.
Leider kann der Seitenschreiber nicht mehr auf den alten Server zugreifen, um eventuell mit phpinfo was zum Vergleich zu holen.
Vielleicht hat jemand eine Idee?
Vielen herzlichen Dank.
Sollten noch Daten zu PHP und Server benötigt werden, reiche ich die gern nach.
<?php
session_start();
require_once('../vLIB/vlibTemplate.php');
require_once('../config.php');
$verbindung=mysql_connect($dbHost,$dbUser,$dbPass);
mysql_select_db($dbSchema);
$TMPLPATH = "./templates/";
$SRCPATH = "./src/";
function SQLDate($date)
{
if(isset($date))
{
list($year,$month,$day) = explode("-",$date);
$cache = array($day,$month,$year);
$date = implode(".",$cache);
return $date;
}
else
{
return "";
}
}
$user=$_POST['username'];
$cmd = $_GET['cmd'];
if(!session_is_registered('user') || $_SESSION['user'] == "" ) {
switch($cmd)
{
case 'login':
$tmpl = new vlibTemplate($TMPLPATH."login.htm");
$tmpl->setVar('title', 'Interner Bereich');
$tmpl->setVar('ida', '0');
$tmpl->setVar('hinweis', 'Bitte geben Sie Ihre Login-Daten ein!');
$username=$_POST['username'];
$userpass=$_POST['userpass'];
if(!isset($_POST['login'])){
$tmpl->setVar('hinweis', 'Bitte geben Sie Ihre Login-Daten ein!');
}
elseif(!$username || $username == "" || !$userpass || $userpass == "") {
$tmpl->setVar('hinweis', 'Hinweis: Sie haben nicht alle Felder ausgefüllt! Versuchen Sie es bitte erneut!');
}
else{
$userpass = md5($userpass);
$query=@mysql_query("SELECT * FROM users WHERE username='$username' AND userpass='$userpass'")/* or die ($tmpl->setVar('hinweis', 'Abfrage fehlgeschlagen'))*/;
$result = @mysql_fetch_array($query)/* or die($tmpl->setVar('hinweis', 'Abfrage fehlgeschlagen'))*/;
if($userpass != $result['userpass']){
$tmpl->setVar('hinweis', 'Hinweis: Login-Daten sind falsch! Versuchen Sie es bitte erneut!');
}
else{
$user = $result['username'];
session_register('user');
/*$_SESSION['loggedin'] == 1;*/
$tmpl->setVar('hinweis', 'Sie haben sich erfolgreich eingeloggt.');
$loginanzahl= $result['loginanzahl'] + 1;
mysql_query("UPDATE users
SET loginanzahl ='$loginanzahl'
WHERE username='$user'"
);
}
}
break;
default:
$tmpl = new vlibTemplate($TMPLPATH."login.htm");
$tmpl->setVar('title', 'Interner Bereich');
$tmpl->setVar('ida', '0');
//$tmpl->setVar('status', "<h1>Herzlich Willkommen</h1>");
break;
}
}
else
{
switch($cmd)
...
Hi,
Abgelegt wird bspw. der Inhalt:
"user|N;"
Es sollte aber an der Stelle von "N" der Name stehen.
Dann ist stark zu vermuten, dass irgendwo im Script auf das erste Zeichen eines Variableninhaltes zugegriffen wurde, statt auf den kompletten Inhalt.
Obwohl ich das für wenig aussichtsreich hielt, habe ich dennoch mal in der php.ini den Eintrag session.cache_limiter auf public gesetzt. Ohne Erfolg.
Hat damit auch nicht das geringste zu tun.
Debugging sollte man mit etwas System und Logik betreiben, und nicht mit Herumraten.
Das ganze tritt seit einem Serverwechsel auf.
Leider kann der Seitenschreiber nicht mehr auf den alten Server zugreifen, um eventuell mit phpinfo was zum Vergleich zu holen.Vielleicht hat jemand eine Idee?
session_register, session_is_registered, etc. - alles seit Urzeiten veraltet, und seit PHP 5.3.0 auch offiziell deprecated; in PHP 6 werden diese Funktion endgültig entfernt werden.
Zeitgemäße Session-Scripte sollten nur noch $_SESSION nutzen.
MfG ChrisB
Hi!
Abgelegt wird bspw. der Inhalt:
"user|N;"
Es sollte aber an der Stelle von "N" der Name stehen.
Dann ist stark zu vermuten, dass irgendwo im Script auf das erste Zeichen eines Variableninhaltes zugegriffen wurde, statt auf den kompletten Inhalt.
Nö, nach dem Namen des $_SESSION-Eintrags steht dessen Typ, und das ist in dem Fall N wie null. Bei einem String stünde s gefolgt von der Länge und dem Inhalt, jeweils durch Doppelpunkte getrennt.
Lo!
Hi,
Abgelegt wird bspw. der Inhalt:
"user|N;"
Es sollte aber an der Stelle von "N" der Name stehen.
Dann ist stark zu vermuten, dass irgendwo im Script auf das erste Zeichen eines Variableninhaltes zugegriffen wurde, statt auf den kompletten Inhalt.Nö, nach dem Namen des $_SESSION-Eintrags steht dessen Typ, und das ist in dem Fall N wie null. Bei einem String stünde s gefolgt von der Länge und dem Inhalt, jeweils durch Doppelpunkte getrennt.
Stimmt, Danke.
Hatte nicht bemerkt, dass das direkt 1:1 das sein sollte, was in der Session-Datei steht.
MfG ChrisB
Hi!
Dein Quellcode ist ein wilder Mix aus Vorgehensweisen, die zu verschiedenen Release-Ständen von PHP (4.x.y ) angesagt waren.
Welche PHP-Version verwendest Du aktuell? Ich hoffe, es ist eine 5 vorne;)
Vergiß bitte session_register und nutze statt dessen das superglobale Array $_SESSION.
Falls Dir das nicht gefällt, oder Du das unelegant findest - was ich verstehen könnte - nutze, oder schreibe Dir eine Klasse, die Dir die Arbeit mit $_SESSION abnimmt.
off:PP
Hi!
Welche PHP-Version verwendest Du aktuell? Ich hoffe, es ist eine 5 vorne;)
Version 5.2.6 ist am Laufen.
Vergiß bitte session_register und nutze statt dessen das superglobale Array $_SESSION.
Falls Dir das nicht gefällt, oder Du das unelegant findest - was ich verstehen könnte - nutze, oder schreibe Dir eine Klasse, die Dir die Arbeit mit $_SESSION abnimmt.
Ich werde das mal an den Entwickler weitergeben. Danke.
War möglicherweise eine ältere Version auf dem Vorgängerserver und kam damit besser klar?
Hi!
Welche PHP-Version verwendest Du aktuell? Ich hoffe, es ist eine 5 vorne;)
Version 5.2.6 ist am Laufen.
Das klingt schon mal gut.
Vergiß bitte session_register und nutze statt dessen das superglobale Array $_SESSION.
Falls Dir das nicht gefällt, oder Du das unelegant findest - was ich verstehen könnte - nutze, oder schreibe Dir eine Klasse, die Dir die Arbeit mit $_SESSION abnimmt.
Ich werde das mal an den Entwickler weitergeben. Danke.
Ja, tue das und dann kommt doch beide wieder;)
War möglicherweise eine ältere Version auf dem Vorgängerserver und kam damit besser klar?
Das weiß ich nicht, da könnte ich nur raten.
off:PP
Vergiß bitte session_register und nutze statt dessen das superglobale Array $_SESSION.
Ich werde das mal an den Entwickler weitergeben. Danke.
Ja, tue das und dann kommt doch beide wieder;)
Da bin ich wieder.
session_register wurde entfernt und das ganze über $_session['user']=$user realisiert.
Nun geht wieder alles. Herzlichen Dank noch mal für die Hinweise!