session_destroy nicht löschen der session_id
Arbeite ich an einem online-ticket-Buchung-Systeme, bei denen nach erfolgreicher Buchung erhalten Sie(nach Zahlungseingang) ich will zum löschen der session-id. Aber die Sache ist ich bin nicht in der Lage, um es klar, ich habe zwar verwendet session_destroy()
zu zerstören der session.
NB: ich hallte die session_id zu überprüfen, ob seine zurücksetzen oder nicht.
URL: http://7sisters.in/7sislabs/
function book_final_tickets()
{
//var_dump($_SESSION);
$session_id = session_id();
$sql = "
UPDATE
tbl_seat_book
SET
final_book = 'Y'
WHERE
session_id = '$session_id'
";
//session_unset();
if($r = $this->db->executeQuery($sql)){
if(session_destroy()){
unset($session_id);
echo 'Booking successfull';
}
}
}
- Ihre Abfrage wird ausgeführt, und die echo-Anweisung gedruckt?
- ya...aber ich will zerstören die Sitzung nach der Buchung des tickets erfolgreich .
- Wenn Sie Ihr echo-Anweisung gedruckt wird, dann wird Ihre Sitzung sollte zerstört worden sein. Versucht zu Debuggen, warum das passieren kann.
- Das echo zeigt gleiche session_id , obwohl es zerstört wird (nach erfolgreicher Buchung)
- Versuchen Sie es mit
session_unset()
. Versuchen Sie auch, den Aufrufsession_start()
vorsession_destroy()
. - Versuchen Sie es mit dieser Reihenfolge der Funktionen: session_start(), session_unset(); , session_destroy(); , $_SESSION = array();
- Um sicherzustellen, Zerstöre ich eine Sitzung, die ich verwenden
session_regenerate_id(true);
vorsession_destroy()
Du musst angemeldet sein, um einen Kommentar abzugeben.
Call
session_id
vorsession_start
, und legen Siesession_id
manuell .Beispiel 1: gleiche session_id verwendet werden
Beispiel 2:
session_id
manuell (so genannte vorsession_start()
)(A) != (B), so können Sie session_id manuell, siehe http://php.net/manual/en/function.session-id.php für weitere Informationen.
Eine andere Lösung, das nicht mit session_id() , erstellen Sie einfach neue session-array:
session_id(uniqid());
ist eine schlechte Idee.uniqid()
ist nicht ganz zufällig, wie es die Zeitstempel basieren. Vermietung PHP-Griff-generationsession_id
automatisch mitsession_regenerate_id()
ist viel besser, da können Sie dann eine bessere Entropie-Quelle (z.B.ini_set('session.entropy_file', '/dev/urandom');
).session_destroy()
allein nicht entfernen Sie die client-side-cookie, so dass der Benutzer das nächste mal Besuche, Sie haben immer noch die gleiche session-id gesetzt (aber server-side-session-Daten zerstört wurden).Aus der docs (Hervorhebung von mir):
Können Sie
session_regenerate_id(true)
generiert eine neue session-ID und löschen Sie die alte. Beachten Sie, dass dadurch halten Sie alle Informationen in$_SESSION
als Teil der neuen session-ID, so müssen Sie noch verwendensession_destroy
wenn Sie möchten, deaktivieren Sie das session-info und frisch starten.z.B.
und der Header zeigt die session-ID ändern auf der client-Seite:
(Sie können sich ohne die
setcookie()
hier nennen, da Sie beim erstellen einer neuen Sitzung jedenfalls, so wird das cookie überschrieben und die neue ID, aber es ist gute Praxis, explizit löschen Sie das alte cookie).Nach der Zerstörung der session mit session_destroy(), dieser arbeitete für mich:
setcookie('PHPSESSID',","Zeit()-3600,'/');
Der Schlüssel für mich war die Einstellung der Pfad zu '/'. Das war der einzige Weg, um wirklich zu zerstören, das cookie.
Versuchen Sie dies:
Statt
session_destroy();
Ich würde lieber nur eine
session_regenerate_id(true);
und Sie erhalten eine neue session_id