Hier ist der Code meiner Anmeldeseite, auf dem das Anmeldeskript die Authentizität des Benutzers überprüft und dann mithilfe der Header-Funktion zur Eingangsseite weiterleitet.
<?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="index.html">Click here to try again</a>';
}
}else{
echo mysqli_error("Login Credentials Incorrect!");
}
?>
Die inbox.php-Seite sieht folgendermaßen 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 immer die Ausgabe: SESSION = Sie müssen sich anmelden, um diese Seite anzuzeigen. Dies bedeutet, dass entweder die Sitzungsvariable nicht eingerichtet wird oder die inbox.php die Sitzungsvariable nicht abrufen kann. Wohin gehe ich falsch?
- Stellen Sie sicher, dass
session_start();
aufgerufen wird, bevor Sitzungen aufgerufen werden. Eine sichere Wette wäre es also, es am Anfang Ihrer Seite, unmittelbar nach dem<?php
-Tag vor der Eröffnung, zu setzen. Stellen Sie außerdem sicher, dass sich vor dem<?php
-Tag keine Leerzeichen/Tabulatoren befinden.- Beenden Sie nach der
header
-Umleitung das aktuelle Skript mitexit();
(Andere haben auchsession_write_close();
undsession_regenerate_id(true)
vorgeschlagen, Sie können diese auch ausprobieren, aber ich würdeexit();
verwenden).- Stellen Sie sicher, dass Cookies in dem Browser aktiviert sind, mit dem Sie sie testen.
- Stellen Sie sicher, dass
register_globals
ausgeschaltet ist. Sie können dies in derphp.ini
-Datei und auch mitphpinfo()
überprüfen. Siehe this , um das Gerät auszuschalten.- Stellen Sie sicher, dass Sie die Sitzung nicht gelöscht oder gelöscht haben.
- Stellen Sie sicher, dass der Schlüssel in Ihrem
$_SESSION
Superglobal-Array nirgendwo überschrieben wird.- Stellen Sie sicher, dass Sie zur gleichen Domäne umleiten. Die Weiterleitung von einem
www.yourdomain.com
nachyourdomain.com
führt die Sitzung also nicht weiter.- Stellen Sie sicher, dass Ihre Dateierweiterung
.php
ist (dies geschieht!).
Ich hatte das gleiche Thema für eine Weile und es fiel mir sehr schwer, es herauszufinden. Mein Problem war, dass ich die Site für eine Weile mit den Sitzungen arbeiten ließ, und dann brach alles zusammen.
Anscheinend muss Ihr session_save_path () für mich/var/lib/php5/über korrekte Berechtigungen verfügen (der Benutzer, der php ausführt, zB www-data benötigt Schreibzugriff auf das Verzeichnis). Ich habe es versehentlich geändert und die Sitzungen komplett unterbrochen.
Führen Sie Sudo chmod -R 700 /var/lib/php5/
und dann Sudo chown -R www-data /var/lib/php5/
aus, damit der PHP-Benutzer Zugriff auf den Ordner hat.
Wenn Ihr Sitzungspfad nicht ordnungsgemäß funktioniert, können Sie die Funktion session.save_path(path/to/any folder);
als alternativen Pfad ausprobieren. Wenn dies funktioniert, können Sie Ihren Hostinganbieter nach dem Standardpfadproblem fragen.
Wenn Sie ein Verbindungsskript verwenden, vergessen Sie nicht, session_start();
auch bei der Verbindung zu verwenden. Bevor Sie dieses Problem bemerken, hatten Sie einige Probleme.
Ich habe gerade mit dem Hosting-Service gesprochen, es war ein Problem an ihrem 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 gut :)
Der andere wichtige Grund, warum Sitzungen nicht funktionieren können, ist das Spielen mit den Sitzungs-Cookie-Einstellungen, z. Setzen Sie die Lebensdauer des Sitzungscookies aufgrund eines einfachen Fehlers oder eines anderen Entwicklers aus einem Grund auf 0 oder andere niedrige Werte.
session_set_cookie_params(0)
Ich hatte ein ähnliches Problem und mit der Cookie-Domain:
ini_set('session.cookie_domain', '.domain.com');
die Domäne war falsch eingerichtet, daher wurden alle Sitzungen ignoriert, da das Benutzer-Cookie nie richtig gesetzt wurde. Ich hoffe, dies hilft jemandem.
Ich stand auch vor dem gleichen Problem, dass ich die folgenden Schritte zur Behebung des Problems durchgeführt habe
2 Danach wurde die unter * chown root.Apache/var/lib/php/session * .__ angegebene Berechtigung geändert. Diese Schritte lösen mein Problem
Ich bin heute auf dieses Problem gestoßen. Das Problem hat mit $ config ['base_url'] zu tun. Ich habe bemerkt, dass htpp: //www.domain.com und http://example.com das Problem war. Um dies zu beheben, setzen Sie Ihre base_url immer auf http://www.example.com