Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Session Handling [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Session Handling


 
doomsday
15-02-2004, 16:45 
 
Ich habe ein Problem mit dem Session Handling, und zwar bekomme ich keinen Zugriff auf meine Session Variablen mehr.
Ich bin jetzt schon 2 Tage am experimentieren.
Daten sind in der Datenbank vorhanden, trotzdem sind die entsprechenden POST Variablen leer.

Wäre dankbar für eine Idee was ich falsch gemacht habe.

HTML Formular zum Login:

<form action="login.php" method="post" target="_top">
<input type="text" name="username" size="25" maxlength="40" />
<input type="password" name="password" size="25" maxlength="25" />
<input type="submit" name="login" class="mainoption" value="Login" />
</form>

login.php

<?
session_start();
include("common.php");
//echo $_POST['username'].':'.$_POST['password'];
if($_POST['username']!='' && $_POST['password']!=''){
$sql = 'SELECT uid,name,status,ally,count_login,imagebase,lang FROM ' .
USER_TABLE .' where name = "'.$_POST["username"].'" AND passwd = password("'.$_POST["password"].'") limit 1';
//echo $sql;
//echo $session_id();
$result = $db->sql_query($sql)
$_SESSION["uid"] = $row['uid'];
$_SESSION["name"] = $row['name'];
...

 
derHund
15-02-2004, 16:50 
 
Daten sind in der Datenbank vorhanden, trotzdem sind die entsprechenden POST Variablen leer.

wie meinst du das? was funktioniert nicht?


wenn sich nen user falsch einloggt, solltest du kein query-ergebnis erhalten ... meinst du das? :confused:

 
doomsday
15-02-2004, 16:54 
 
Wenn ich versuche im nachhinein auf die daten zuzugreifen sind sie leer.
zB. beim überprüfen ob sie in der DatenBank vorhanden sind, sind beide Strings leer. Das Seltsame ist, das wenn ich den Kommentar in der Zeile mit session_id() entferne sind die richtigen Werte enthalten.

Dadurch ist ein einloggen nicht möglich auch nicht für richtiges einloggen.

 
TobiaZ
15-02-2004, 17:00 
 
vorab: benutzt du auch überall session_start()?

Wenn ich versuche im nachhinein auf die daten zuzugreifen sind sie leer. welche daten meinst du?

es wäre net schlecht, wenn du dich mal etwas genauer ausdrücken würdest. dann müsste man nicht für jeden furz nachfragen.

 
TobiaZ
15-02-2004, 17:02 
 
Das Seltsame ist, das wenn ich den Kommentar in der Zeile mit session_id() entferne sind die richtigen Werte enthalten.

du meinst diese zeile://echo $session_id(); lass den kommentar mal lieber drin, die zeile ist so falsch wies nur geht.

 
roNn
15-02-2004, 17:04 
 
session_id();

wäre da wohl angebrachter :D

 
doomsday
15-02-2004, 17:06 
 
Nach dem Absenden des HTML-Formulars :
$_POST['username'] enthällt ""
$_POST['password'] enthällt ""

entferne ich die Kommentarzeichen bei den Kommentaren bekomme ich die richtigen Werte in den Post-Variablen in der Zeile
//echo $_POST['username'].':'.$_POST['password']; angezeigt(+SQL-Query), ansonsten aber eine weiße leere Seite.

 
derHund
15-02-2004, 17:38 
 
hmm,

entferne die zeile mit der session_id, entferne in den beiden anderen die kommentare, post den relevanten output, danke ....

mal mal
print_r($_POST);
direkt, nachdem du die session startest...

 
doomsday
15-02-2004, 17:50 
 
habe mal beides probiert:
1. Quelltext

session_start();
print_r($_POST);
echo $_POST["username"].':'.$_POST["password"];
...
echo $sql;
// $session_id();

1. Ausgabe
Array ( ) :

2. Quelltext

session_start();
print_r($_POST);
echo $_POST["username"].':'.$_POST["password"];
...
echo $sql;
$session_id();

2. Ausgabe
Array ( [username] => doomsday [password] => tweety [login] => Login ) doomsday: password
SELECT uid,name,status,lang FROM user where name = "doomsday" AND passwd = password("password") limit 1

 
derHund
15-02-2004, 17:55 
 
hmm,

wo ist das problem. geht doch wie gewünscht?

 
doomsday
15-02-2004, 18:03 
 
Das Problem ist das ich durch das session_id() eine lediglich weiße Seite bekomme anstatt der Normalen.

Demzufolge habe ich 2 Möglichkeiten:
1. Ich rufe eine Funktion auf die es nicht gibt und bekomme meine Werte und sonst gar nichts.
2. Ich bekomme meine Seite wunderbar angezeigt und ohne Fehlermeldungen ( bis auf die wegen des Sessionhandlings), kann mich aber nicht anmelden.

 
doomsday
15-02-2004, 18:19 
 
Habe grad einen Anhaltspunkt gefunden:
Im Session Verzeichnis sind 3 Session-Dateien vorhanden, nach einem Loginversuch.
Allerdings verschlißt sich mir das Verständnis Warum dies so ist.

 
derHund
15-02-2004, 19:15 
 
Das Problem ist das ich durch das session_id() eine lediglich weiße Seite bekomme anstatt der Normalen.

kann es sein, daß du beim ersten versuch einfach keine daten angeben hast? bzw. dasß formular garnicht abgesendet hast ...

ehrlich gesagt, verstehe ich dein problem immer noch nicht ...

 
doomsday
15-02-2004, 20:06 
 
Also nach dem 40. mal den Code anschauen den ich mal produziert habe konnte ich die Fehlerquelle ermitteln.
Kurz der Sinn des Ganzen

Aufruf der Login Seite->login.php
diese Datei überprüft die übergebenen POST Parameter und leitet über header() an eine andere Datei weiter(overview.php).

Auf der eigentlichen Inhaltsseite(overview.php) wird überprüft ob eine Session vorhanden ist, und wenn nicht an die login zurückgeschickt.

Das Problem ist bzw war das diese 2 Dateien Ping Pong gespielt haben.
In der 2. Datei kommen keine Werte in SESSION an, und so wird die login seite wieder aufgerufen.

Deshalb kam es auch vermutlich zu den 3 Session Dateien.

Allerdings weiß ich noch immer nicht wieso nach dem Login(alle Werte werden übergeben und Session wird angelegt) beim Aufruf der 2. Seite eine neue Session erstellt wird, mit unvollständigen (Daten SESSION ist leer) obwohl ich session_start() aufgerufen habe.
Habe die wesentlichen Zeilen nochmal angeführt.

login.php

session_start();
if(isset($_POST['username']) && isset($_POST['password'])){
$sql = 'SELECT uid,name,lang FROM ' . USER_TABLE .
' where name = "'.$_POST["username"].'" AND passwd = password("'.$_POST["password"].'") limit 1';
if($db->sql_numrows($result) == 1){

$row = $db->sql_fetchrow($result);
$_SESSION["uid"] = $row['uid'];
$_SESSION["name"] = $row['name'];
$_SESSION["lang"] = $row['lang'];
/*
if (isset($_GET["redir"])&&$_GET["redir"]!=''){
header("Location:".$_GET["redir"]);
}else{
header("Location: overview.php");
}
*/
header("Location:overview.php");
...

overview.php

session_start();
...
if(!isset($_SESSION['uid'])){
header("Location:login.php?redir=overview.php");
}

 
derHund
15-02-2004, 20:48 
 
wenn du keine cookies für die session akzeptierst, ist sie weg nachm header ... da sie ja nicht mehr in der url steht ... :dontknow:

 
doomsday
16-02-2004, 01:31 
 
Cookies werden akzeptiert. Auch wird keine Ausgabe nach dem Eingeben der Daten erzeugt, denn Ausgabe erfolgt erst auf der 2. Seite.

Im Login Skript wird die Session variable ohne Probleme mit Daten gefüllt, allerdings wird beim Aufruf der 2. Seite (obwohl mit session_start()) eine neue Session erzeugt(ersichtlich an der 2. Session Datei im PHP Sessionverzeihnis).
Aufgrund der neuen Session sind aber die anderen Daten nicht mehr greifbar.
Was mache ich also falsch? Eigentlich dürfte doch nur eine Session mit den Werten existieren,oder?

 
marc75
16-02-2004, 09:20 
 
gib mal die sessionuri beim header mit.


Beispiel:
$row = $db->sql_fetchrow($result);
$_SESSION["uid"] = $row['uid'];
$_SESSION["name"] = $row['name'];
$_SESSION["lang"] = $row['lang'];
$sess = "?".session_name()."=".session_id()."";
header("Location:overview.php".$sess."");

 
doomsday
16-02-2004, 19:24 
 
guter Einfall, klappt auch.
Kann mir allerdings noch jemand erklären warum ich die Session id jetzt jedesmal mit in die url geben muss?
Als ich das Skript mal geschrieben habe hat es doch auch ohne funktioniert (3/4 Jahr her).
Hab ich evt. eine falsche Einstellung in der php.ini?

 
derHund
16-02-2004, 19:43 
 
wenn du keine cookies für die session akzeptierst, ist sie weg nachm header ...

wäre meine erklärung ... also eigene header:location-function schreiben, die das abfragt ...

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 04:22 Uhr.