Sessions arbeiten nicht richtig

Hi leutz,

Ich benutze ein ganz normales Loginverfahren mit Sessions:

also:

session_start();

if ($pw = “soundso”) {
$_SESSION[‘logged’] = “soundso”;
header (“Location soundso.de”);
}
else {
}

Das problem ist, das wenn der browser(firefox) geöffnet wurde und man sich eingeloggt hat die session nicht erstellt wird. ERst nach dem 2.ten login wird die session erstellt.

Woran liegt das ->

Probierts selber mal aus gb-free.de

Username: 1234
Pw 1234

(Projekt noch in bearbeitung)

[code]<?php
session_start();
if ($_POST[“pw”] == “pw” && $_POST[“user”]==“nick”) {
$_SESSION[‘logged’] = “1”;
header (“Location index.php”);
}else{
echo’’;
echo’Benutzer’;
echo’Passwort’;

}
if(isset($_SESSION[‘logged’])){
echo"Alles was du vertecken willst kommt hier her";
}
?>[/code]
externe links Klapen Nicht
Hoffe Das es dir hilft

Ne leider nicht
Das ist der Headerquelltext:

session_start();
if (isset($_SESSION['logged'])) {
if ($_GET['seite'] == "logout") {
session_unset();
if (isset($_COOKIE['PHPSESSID'])) {
setcookie("PHPSESSID", "", time()-86400);
}
session_destroy();
}
$data = explode("@@", $_SESSION['logged']);
$sqlbefehl = "SELECT * FROM users WHERE (Username LIKE '".$data[0]."') AND (Passwort = '".$data[1]."') LIMIT 1;";
$ergebnis = mysql_query($sqlbefehl);

if (mysql_num_rows($ergebnis) != "0") {
if (($_GET['seite'] != "user") and ($_GET['seite'] != "logout")) {
header("Location: http://www.gb-free.de/?seite=user");
}}
else {
header("Location: http://www.gb-free.de/?seite=logout");
}}

if(!isset($_SESSION['logged']) and $_GET['seite'] == "user") {
header("Location: http://www.gb-free.de/");
}
echo $_SESSION['logged'];
if(!isset($_SESSION['logged']) and $_GET['seite'] == "logout") {
header("Location: http://www.gb-free.de/");
}

Setze ich gleich in einem Anahg
Bitte sehr Hier hast du ein teil vom login was ich mal geschreiben habe

inc dateien müssen im ordner inc getan werden

Das ist wirklich sehr nett von dir :slight_smile:
Aber ich möchte trotzdem von irgendjemand anhand meines Codes die problemstelleung erklärt bekommen.
Trotzdem danke dafür…
Also falls noch irgendjemand meinen Fehler erkennt - Bitte schreibt :p

hier ist ein fehler

elseif(isset($_GET['seite'] == "logout")) { unset($_SESSION["logged"]); }
Am anfang If Dan Die Folgene Mit elseif
Da sollte es klapen

[code]session_start();
if (isset($_SESSION[‘logged’])) {
elseif ($_GET[‘seite’] == “logout”) {
unset($_SESSION[“logged”]);
}
elseifif (isset($_COOKIE[‘PHPSESSID’])) {
setcookie(“PHPSESSID”, “”, time()-86400);
}
session_destroy();
}
$data = explode("@@", $_SESSION[‘logged’]);
$sqlbefehl = “SELECT * FROM users WHERE (Username LIKE '”.$data[0]."’) AND (Passwort = ‘".$data[1]."’) LIMIT 1;";
$ergebnis = mysql_query($sqlbefehl);

if (mysql_num_rows($ergebnis) != “0”) {
elseif (($_GET[‘seite’] != “user”) and ($_GET[‘seite’] != “logout”)) {
header(“Location: http://www.gb-free.de/?seite=user”);
}
}
else {
header(“Location: http://www.gb-free.de/?seite=logout”);
}}

elseif(!isset($_SESSION[‘logged’]) and $_GET[‘seite’] == “user”) {
header(“Location: http://www.gb-free.de/”);
}
echo $_SESSION[‘logged’];
if(!isset($_SESSION[‘logged’]) and $_GET[‘seite’] == “logout”) {
header(“Location: http://www.gb-free.de/”);
}[/code]

Versuch mal so

Nee sorry das geht auch nicht…
Die Syntax ist falsch…
Egal - erklär mir einfach mal den fehler, dann recihts mir :slight_smile:

Müsste jetzt richtig sein: (Syntaktisch)

[code]session_start();
if (isset($_SESSION[‘logged’])) {
if ($_GET[‘seite’] == “logout”) {
unset($_SESSION[“logged”]);
}
elseif (isset($_COOKIE[‘PHPSESSID’])) {
setcookie(“PHPSESSID”, “”, time()-86400);
}
session_destroy();
}
$data = explode("@@", $_SESSION[‘logged’]);
$sqlbefehl = “SELECT * FROM users WHERE (Username LIKE '”.$data[0]."’) AND (Passwort = ‘".$data[1]."’) LIMIT 1;";
$ergebnis = mysql_query($sqlbefehl);

if (mysql_num_rows($ergebnis) != 0) {
if (($_GET[‘seite’] != “user”) && ($_GET[‘seite’] != “logout”)) {
header(“Location: http://www.gb-free.de/?seite=user”);
}
}
else {
header(“Location: http://www.gb-free.de/?seite=logout”);
} //} // eine klammer zuviel

//elseif(!isset($_SESSION[‘logged’]) and $_GET[‘seite’] == “user”) { // da kannst kein elseif haben, wenn du kein if hast…
if(!isset($_SESSION[‘logged’]) && $_GET[‘seite’] == “user”) {
header(“Location: http://www.gb-free.de/”);
}
echo $_SESSION[‘logged’];
if(!isset($_SESSION[‘logged’]) && $_GET[‘seite’] == “logout”) {
header(“Location: http://www.gb-free.de/”);
}
[/code]

Geht alles nicht :neutral_face:
Ich weiss nun wirklich nicht woran des liegt.

Nochmal die problembeschreibung:
Session wird nicht beim ersten login gesetzt.
Erst nach2 tem login wird se gesetzt.
WEnn man den Browser neustartet (firefox) geschieht das gleiche wieder.
Dieses Phänomen ist mir nur beim firefox aufgefalln

Weil FireFox zu deiner Sicherheit das Sessioncookie löscht :wink:

Achso…
Und wie kann man dem Browser nun sagen dass er das cookie bei besuch erstellen soll?
ich dachte mit session_start() wär das getan?

Der letzte Hinweis mit dem Cookie und Firefox dürfte m.E. wenig mit dem Problem zu tun haben.

Viel eher dürfte das ganze daran liegen, dass du direkt nach dem Starten der Session mit einem Location-Header umleitest. Zu der Problematik haben die Nutzerkommentare zu session_start im Manual einiges an Hinweisen …

Vielen Dank :wink: