Hier ist der Code meiner Anmeldeseite, auf der das Anmeldeskript die Authentizität des Benutzers überprüft und dann mithilfe der Header-Funktion auf die Posteingangsseite umleitet.
<?php
session_start();
include_once('config.php');
$user=htmlentities(stripslashes($_POST['username']));
$password=htmlentities(stripslashes($_POST['password']));
// Some query processing on database
if(($id_user_fetched<=$id_max_fetched) && ($id_user_fetched!=0)){
$_SESSION['loggedIn'] = 'yes';
header("Location:http://xyz/inbox.php?u=$id_user_fetched");
//echo 'Login Successful';
}else{
echo 'Invalid Login';
echo'<br /> <a href="https://stackoverflow.com/questions/19692157/index.html">Click here to try again</a>';
}
}else{
echo mysqli_error("Login Credentials Incorrect!");
}
?>
Die Seite inbox.php sieht so aus:
<?php
session_start();
echo 'SESSION ='.$_SESSION['loggedIn'];
if($_SESSION['loggedIn'] != 'yes'){
echo $message="you must log in to see this page.";
//header('location:login.php');
}
//REST OF THE CODE
?>
Mit dem obigen Code zeigt die inbox.php jetzt immer die Ausgabe: SESSION=Sie müssen sich anmelden, um diese Seite zu sehen. Das bedeutet, dass entweder die Sitzungsvariable nicht eingerichtet wird oder die inbox.php die Sitzungsvariable nicht abrufen kann. Wo gehe ich falsch?

zurück
- Versicher dich
session_start();
aufgerufen wird, bevor Sitzungen aufgerufen werden. Es wäre also eine sichere Wette, es am Anfang Ihrer Seite zu platzieren, direkt nach dem Öffnen <?php
Tag vor allem anderen. Stellen Sie außerdem sicher, dass vor dem Öffnen keine Leerzeichen/Tabulatoren vorhanden sind <?php
Schild.
- Nach dem
header
Umleitung, beenden Sie das aktuelle Skript mit exit();
(Andere haben auch vorgeschlagen session_write_close();
und session_regenerate_id(true)
Sie können diese auch versuchen, aber ich würde verwenden exit();
).
- Stellen Sie sicher, dass Cookies in dem Browser aktiviert sind, den Sie zum Testen verwenden.
- Sicherstellen
register_globals
ausgeschaltet ist, können Sie dies am überprüfen php.ini
Datei und auch mit phpinfo()
. Beziehen auf Das wie man es ausschaltet.
- Stellen Sie sicher, dass Sie die Sitzung nicht gelöscht oder geleert haben.
- Stellen Sie sicher, dass der Schlüssel in Ihrem ist
$_SESSION
Superglobales Array wird nirgendwo überschrieben.
- Stellen Sie sicher, dass Sie auf dieselbe Domain umleiten. Also Umleitung von a
www.yourdomain.com
zu yourdomain.com
bringt die Sitzung nicht voran.
- Stellen Sie sicher, dass Ihre Dateierweiterung
.php
(es passiert!).
PHP-Sitzung nach Umleitung verloren

Vadman
Ich hatte das gleiche Problem für eine Weile und hatte eine sehr harte Zeit, es herauszufinden. Mein Problem war, dass die Seite eine Weile funktionierte und die Sitzungen richtig funktionierten, und dann brach plötzlich alles zusammen.
Anscheinend muss Ihr session_save_path(), bei mir war es /var/lib/php5/, die richtigen Berechtigungen haben (der Benutzer, der PHP ausführt, zB www-data, benötigt Schreibzugriff auf das Verzeichnis). Ich habe es versehentlich geändert und die Sitzungen vollständig unterbrochen.
Laufen sudo chmod -R 700 /var/lib/php5/
und dann sudo chown -R www-data /var/lib/php5/
damit der PHP-Benutzer Zugriff auf den Ordner hat.

Luis Felipe de Melo
Wenn Sie ein Verbindungsskript verwenden, vergessen Sie nicht, es zu verwenden session_start();
auch an der Verbindung, hatte einige Probleme, bevor ich dieses Problem bemerkte.

Aschraf Ali
Wenn Ihr Sitzungspfad nicht richtig funktioniert, können Sie es vielleicht versuchen session.save_path(path/to/any folder);
fungieren als Alternativpfad. Wenn es funktioniert, können Sie Ihren Hosting-Provider nach dem Problem mit dem Standardpfad fragen.
Vielleicht hilft es anderen, mir selbst hatte ich
session_regenerate_id(false);
Ich habe es entfernt und alles ok!
nach dem Login war ok … autsch!

Arihant
Ich habe gerade mit dem Hosting-Service gesprochen, es war ein Problem an deren Ende. Er sagte: “Ihr Konto session.save_path wurde nicht festgelegt, da ein Problem auftritt. Ich habe es jetzt für Sie festgelegt.”
Und danach funktioniert es einwandfrei 🙂

Talsibon
Ich hatte ein ähnliches Problem und mit der Cookie-Domain:
ini_set('session.cookie_domain', '.domain.com');
Die Domäne wurde falsch eingerichtet, daher wurden alle Sitzungen ignoriert, da das Benutzer-Cookie nie richtig gesetzt wurde. Ich hoffe, dies wird jemandem helfen.
9889300cookie-checkSitzungsvariablen funktionieren nicht phpyes
Es sollte sein
echo "Login Credentials Incorrect!" ;
nichtecho mysqli_error("Login Credentials Incorrect!");
– rückgängig gemacht
30. Oktober 2013 um 19:31 Uhr
Können Sie Debuggen, um zu bestätigen, dass die Bedingungen Ihrer
if
Anweisung wird ausgewertettrue
? (d. h. eine Aussage im True- und False-Block wiederholen, um zu sehen, welcher feuert)– Crackertastisch
30. Oktober 2013 um 19:32 Uhr
1. rufen Sie beide Skripte von derselben Domäne auf? 2. Verwenden Sie irgendeine Art von session_name, session_id, session_set_cookie? 3. session_start gibt einen Wert zurück, überprüfen Sie ihn?
– Ilja Bursov
30. Oktober 2013 um 19:32 Uhr
@Crackertastic Ja, ich kann Ihnen versichern, dass sie als wahr bewertet werden. mehrmals überprüft
– Arihant
30. Oktober 2013 um 19:33 Uhr
Das sind zwei
else
Aussagen für einenif
– rückgängig gemacht
30. Oktober 2013 um 19:33 Uhr