Sessions kommen und gehen wie sie wollen
freeman4gu
- php
0 dedlfix
0 Tom0 freeman4gu0 Tom0 freeman4gu0 freeman4gu0 Tom
0 freeman4gu
Hallo zusammen,
ich habe da ein Problem, ich hoffe ich poste hier richtig. Also ich habe eine Website mit Sessions erstellt. Komischerweise macht diese seit einiger Zeit einige Probleme. Und zwar, je nach Lust und Laune bricht die Session ab, nach einen bis mehreren Reloads bin ich wieder online.
Ich habe mal einfach die Session Variablen ausgeben lassen und tatsächlich, mal sind sie da, mal nicht.
Ich benutze eine dafür angelegte Session-Klasse. Ich werde mal etwas code posten wie das ganze funktioniert. Ich kann da keinen Fehler finden. Vielleicht seht Ihr ja was.
Code:
[CODE]
<?php
session_start();
require_once("session.php");
$session = new session();
$check = $session->getSession();
if($check == "false")
{
$session->setSession("beispiel","beispiel");
}
else
...
?>
//Session Klasse
class session
{
var $db;
function session()
{
$this->db = new db_klasse;
}
function getSession() //Überprüft die Session und gibt true oder false zurück
{
if($_SESSION['userid']!="" && $_SESSION['nick']!="" && $_SESSION['name']!="")
{
$ergebnis = $this->db->db_query(...);
$result=mysql_fetch_array($ergebnis);
$zurueck = "false";
if($result[0]==$_SESSION['zahl'] && $_SESSION['nick']==$result[1])
{
$zurueck = "true";
}
return $zurueck;
}
else
{
return "false";
}
}
function setSession($user, $passwd)
{
$ergebnis = $this->db->db_query(...);
$bool = "false";
$result = mysql_fetch_array($ergebnis);
if($result[1]==$user && $user!="")
{
$_SESSION['userid'] = $result[0];
$_SESSION['nick'] = $result[1];
$_SESSION['name'] = $result[2];
$zufall=rand(0,1000000);
$_SESSION['zahl']=$zufall;
$bool = "true";
}
return $bool;
}
}
[/CODE]
Ich habe ein wenig Code entfernt, will ja nicht alles preisgeben. Aber das ist grundsätzlich der Aufbau.
Ich hoffe Ihr könnt mir helfen.
Achso bevor ichs vergesse, das passiert in Firefox, Opera und IE. Von daher muss es was an der Programmierung sein.
echo $begrüßung;
Also ich habe eine Website mit Sessions erstellt. Komischerweise macht diese seit einiger Zeit einige Probleme. Und zwar, je nach Lust und Laune bricht die Session ab, nach einen bis mehreren Reloads bin ich wieder online.
Den Code hab ich mir nicht genauer angesehen. Wenn du nur session_start() und das $_SESSION-Array verwendest ist der Fehler eher außerhalb zu suchen. Wo lagert das Projekt? Ist es vielleicht auf einem Server, den noch andere Nutzer mitverwenden? Wenn ja, schau dir die Konfigurationswerte für Sessions in der phpinfo() an. Besonders der session.safe_path sollte auf ein eigenes Verzeichnis zeigen. Wenn da ein gemeinsames Verzeichnis verwendet wird, kann es passieren, dass da der Garbage Collector von PHP-Scripten mit andes konfigurierten Verfallszeiten aufräumt.
echo "$verabschiedung $name";
Hallo,
Besonders der session.safe_path sollte auf ein eigenes Verzeichnis zeigen. Wenn da ein gemeinsames Verzeichnis verwendet wird, kann es passieren, dass da der Garbage Collector von PHP-Scripten mit andes konfigurierten Verfallszeiten aufräumt.
Aber dann wäre doch die Session nicht mehr da.
Also ich muss mich nicht erneut anmelden, sie besteht noch. Nur sie wird in 50% oder weniger der Fälle einfach nicht erkannt bzw. ich bekomme keine Ausgabe der Session Variablen. Wenn ich aber ein paar mal F5 drücke oder die Seite über Links wechsle, dann ist Sie wieder da.
Hello,
Ich habe ein wenig Code entfernt, will ja nicht alles preisgeben. Aber das ist grundsätzlich der Aufbau.
Hast Du auch die Fehlerbehandlung entfernt?
Datenbankquery ohne Kontrolle des Status ist schonmal eine mögliche Fehlerquelle für Dein Problem.
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de
.
Hey,
Ich habe ein wenig Code entfernt, will ja nicht alles preisgeben. Aber das ist grundsätzlich der Aufbau.
Hast Du auch die Fehlerbehandlung entfernt?
Datenbankquery ohne Kontrolle des Status ist schonmal eine mögliche Fehlerquelle für Dein Problem.
Also die Querys funktionieren und falls die Abfrage falsch ist wird auch false zurückgegeben. Das ist nicht das Problem.
Ich meine aber auch schon direkt auf der Startseite, lassen wir mal die Session Klasse weg.
Dann
<?php
session_start();
echo $_SESSION['beispiel'];
?>
Dann ist der Wert ab und zu da und ab und zu halt auch nicht.
Nur bei Relaod der Seite. Die verschwinden einfach manchmal bei
einem Aufruf, sind aber beim nächsten wieder da.
Bin bei Strato, vielleicht haben die auch Mist gemacht.
Ich hab noch anderen Webspace, werde da mal den ganzen Kram
testen, dann aber ohne DB - Abfrage. Vielleicht bringt das ja
antworten.
Hello,
<?php
session_start();echo $_SESSION['beispiel'];
$_headers = getallheaders();
echo "<pre>\r\n";
echo "<h2>Cookies</h2>\r\n";
echo htmlspecialchars(print_r($_COOKIE,1));
echo "<h2>Headers</h2>\r\n";
echo htmlspecialchars(print_r($_headers,1));
echo "</pre>\r\n";
?>
und mal schauen, ob man da festmachen kann, wann es funktioniert und wann nicht.
Wenn übrigens ein Script, dass die Session nutzt, noch läuft, wenn Du das nächste aufrufst, dann kommt das zweite normalerweise nicht an die Sessiondaten heran, da das erste die Sessiondatei noch sperrt. Das zweite müsste dann allerdings warten, und nicht das Holen der Daten einfach überspringen.
Gib doch bitte noch ein paar Informationen zu Deiner Umgebung:
was man eben so wissen sollte.
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de
.
Hello,
<?php
session_start();echo $_SESSION['beispiel'];
$_headers = getallheaders();
echo "<pre>\r\n";
echo "<h2>Cookies</h2>\r\n";
echo htmlspecialchars(print_r($_COOKIE,1));
echo "<h2>Headers</h2>\r\n";
echo htmlspecialchars(print_r($_headers,1));
echo "</pre>\r\n";?>
und mal schauen, ob man da festmachen kann, wann es funktioniert und wann nicht.
Wenn übrigens ein Script, dass die Session nutzt, noch läuft, wenn Du das nächste aufrufst, dann kommt das zweite normalerweise nicht an die Sessiondaten heran, da das erste die Sessiondatei noch sperrt. Das zweite müsste dann allerdings warten, und nicht das Holen der Daten einfach überspringen.
Gib doch bitte noch ein paar Informationen zu Deiner Umgebung:
- OS:
- Servertyp und Version:
- PHP als Modul, CGI oder FastCGI:
- PHP-Version
- ...
was man eben so wissen sollte.
Ok, also, das mit den Headern werd ich heute Nachmittag mal ausprobieren. Hab hier im Moment gerade keine Möglichkeit auf den Webspace zuzugreifen und änderungen vorzunehmen.
Uii, mit den Umgebungsinformationen wirds schwer, da Strato nicht so viele Angaben bezüglich dieser macht. Also OS und Servertyp kann ich nciht sagen, außer es gibt ne php Funktion mit der ich das auslese.
Ob PHP als Modul, CGI oder FastCGI läuft sollte ich eigentlich über phpinfo rausbekommen. Kann ich logischerweise aber auch erst heute Nachmittag machen. Ich vermute mal aber als CGI.
Werde aber auch bald den Anbieter wechseln. Da ich mit Zugriffszeiten und Verfügbarkeit bei Stratos kleinen Paketen nicht wirklich zufrieden bin.
So ich habe das ganze jetzt mal ein wenig umfunktioniert, halt alles bloß ohne Datenbankabfragen auf freehostia.de und siehe da keine Probleme.
Was soll ich davon nur im Moment halten?!
Ich habe aber auch noch eine andere Seite bei Strato, bei der eine ähnliche Version der Session Klasse einfach funktioniert.
Ich hab einfach keine Ahnung, da muss sich was eingeschlichen haben.
OK, also ich hab das Problem scheinbar gelöst.
Es lag an den Einstellungen am Webspace. Bei Strato kann
man angeben bei welcher Endung einer php Datei welche
php Version genommen wird.
Bei mir war noch 4.8 oder so ähnlich eingestellt, aber
objektorientiert wurde php ja eigentlich erst mit php5.
Hab dies jetzt geändert und zack alles läuft... jedenfalls
bisher.
Aber ich danke euch zwei, die mich tatkräftig unterstützt
haben.
Hello,
Hab dies jetzt geändert und zack alles läuft... jedenfalls
bisher.
Daran sieht man mal wieder, dass die wirkliche Ursache oft erst erkannt werden kann, wenn man alle falschen Stellen ausgiebig untersucht hat :-)
Hilfe, gerne wieder. Wenn Rückmeldungen kommen, macht das auch Spaß!
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de
.
OK, also ich hab das Problem scheinbar gelöst.
Es lag an den Einstellungen am Webspace. Bei Strato kann
man angeben bei welcher Endung einer php Datei welche
php Version genommen wird.
Bei mir war noch 4.8 oder so ähnlich eingestellt, aber
objektorientiert wurde php ja eigentlich erst mit php5.
Hab dies jetzt geändert und zack alles läuft... jedenfalls
bisher.
Aber ich danke euch zwei, die mich tatkräftig unterstützt
haben.