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)
Probleme mit Sessions [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Probleme mit Sessions


 
H8c0re
28-04-2006, 18:03 
 
Hallo, sry für die vage Überschrift, aber mir ist nichts besseres eingefallen.
Nun zu meinem Problem:

Ich bastel mit einem Kommilitonen an einer Filmdatenbank, wo Freunde halt ihre DVD-Sammlung reinstellen können.
Diese Datenbank soll mit PHP und SQL realisiert werden.

Nun sind wir auf folgendes Problem gestoßen:

Man soll sich später auf der Seite einloggen können, da nur eingelogte User auf die Datenbank zugreifen dürfen.
Wir haben also ein Loginskript geschrieben, was Benutzername und Passwort über ein Formular abfragt, mit der Userdatenbank vergleicht und bei korrekter Eingabe den Username in eine Session-Variable speichert.

Soweit, sogut.
Nun habe ich ein bissle Code integriert, so dass mir linsk unten auf der Seite angezeigt wird: "Eingeloggt als: <Username oder halt Gast> je nachdem, ob die Session-Variable "Username" gesetzt ist oder nicht.

Nachdem ich nun beim Login auf einloggen gehe, wird mir unten links auch schön der Username angezeigt.
Sobald ich jedoch irgendeinen Link auf der Seite anklicke (z.B. aus der Navibar heraus) oder einen weiteren Button anklicke (z.B. um einen Film in die DB einzutragen) steht unten wieder "Eingeloggt als Gast".
Nach ein bisschen echo's setzen scheint es nun wirklich so zu sein, dass die Session-Variable gelöscht wurde.

Danach hab ich mal gegooglet und hier dieses Tutorial gefunden:
http://www.php-resource.de/tutorials/read/33/1/
Im Grunde habe ich es fast genau so gemacht wie dort erklärt.
Ich habe also die Quelldateien von diesem Tutorial runtergeladen, die Datenbankeinträge verändert, ansonsten alles genauso gelassen und versucht mich dort einzuloggen.

Genau das selbe Problem: Ich logge mich ein, er geht auf eine neue Seite wo steht "Login erfolgreich" + Link zu einer Seite, die halt nur eingeloggt erreichbar sein soll.
Sobald ich auf den Link klicke haut er mich wieder auf die Indexseite, aufgrund der Abfrage


session_start();
if(!session_is_registered('user') || $_SESSION['user'] == "")
{
header("location:index.php");
die;
}

Da ich davon ausgehe, dass das Tutorial ansich lauffähig ist :), und somit mein SourceCode auch muss es an irgendwas anderes liegen, das die Session-Variablen nicht richtig gespeichert werden, wenn ich auf einen Link/Button klicke.

Und hier meine Frage:
Wo könnte der Fehler sein?

Das benutze ich:
Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.12) Gecko/20050919 Firefox/1.0.7

Der Webserver:
Apache/2.0.46 (Win32) mod_perl/1.99_10-dev Perl/v5.8.0 PHP/4.3.2 mod_ssl/2.0.46 OpenSSL/0.9.7b

Und MySQL kommt wie folgt daher:
\wampp2\mysql\bin\mysqld Ver 4.0.13-max-debug for Win95/Win98 on i32 0

Falls ich vergessen habe, was zu schreiben,lasst esmich wissen.
Ich bin für jeden Rat dankbar!

 
Alrik
28-04-2006, 18:13 
 
Hi,

Wird session_start auf jeder Seite aufgerufen?

Gruß Thomas

 
wahsaga
28-04-2006, 19:09 
 
Original geschrieben von H8c0re
if(!session_is_registered('user') || $_SESSION['user'] == "")
session_is_registered() solltest du, genauso wie session_register(), nicht mehr benutzen.

Benutze (abgesehen von session_start()) ausschließlich $_SESSION - zum setzen/auslesen von Werten, für Überprüfungen isset()/empty() auf $_SESSION.

Wenn das dein Problem noch nicht löst, dann überprüfe zunächst, ob die Session-ID korrekt ans Folgescript weitergereicht wird.

 
Slava
28-04-2006, 19:12 
 
versuch bitte

session_start();
if(!session_is_registered('user') || $_SESSION['user'] == "") {
header("location:index.php");
die;
}



so zu ändern

error_reporting(E_ALL);
session_start();
if(!isset( $_SESSION['user'] )) header("location: http..../index.php");//lehrzeichen nch":"
elseif($_SESSION['user']=="")header("location: http..../index.php");

 
wahsaga
28-04-2006, 19:46 
 
Wenn dann bitte gleich richtig - ein Location-Header erfordert einen absoluten URL inkl. Protokoll-Angabe.

 
Slava
28-04-2006, 19:48 
 
Danke wahsaga!
wird gleich korregiert
kommische weise als ich http://seite.de geschrieben habe hat es gespinnt und <a href drasus gemacht.
also http..... muss auch verständlich sein

 
ghostgambler
01-05-2006, 16:01 
 
Original geschrieben von Slava
Danke wahsaga!
wird gleich korregiert
kommische weise als ich http://seite.de geschrieben habe hat es gespinnt und <a href drasus gemacht.
also http..... muss auch verständlich sein
dafür gibt es unten das Häkchen bei "URLs automatisch umwandeln: fügt automatisch [ url] und [/url] um Internetadressen ein."

 
hhcm
01-05-2006, 17:21 
 
Öh.. Warum nicht einfach


session_start();
if(empty( $_SESSION['user'] ) header("Location: http:....index.php");


Das $_SESSION['user']=="" kann man sich auch sparen.

 
H8c0re
01-05-2006, 18:24 
 
Hallo, sry das ich mich jetzt erst melde.

Also, das session_is_registered('user')-Zeug wurde in dem fertigen Skript benutzt, ich hatte es über $_SESSION gemacht.
Das Skript scheint wohl schon was älter... :)

Den Tipp von wahsaga folgend, habe ich dann mal die Session_ID's ausgeben lassen, nebenbei hier und da noch Kleinigkeiten am Code verändert und naja, auf einmal ging es. Leider bin ich nicht im Stande zu sagen, woran es nun wirklich lag, aber so ich mich kenne, war bei irgend ner Variablendeklaration wieder nen Tippfehler drin oder so.
Keine Ahnung. Trotzdem vielen Dank für eure Hilfe!

 
ghostgambler
02-05-2006, 07:03 
 
Original geschrieben von H8c0re
aber so ich mich kenne, war bei irgend ner Variablendeklaration wieder nen Tippfehler drin oder so.
programmiere auf error_reporting(E_ALL) und das passiert dir nicht ^^,

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:49 Uhr.