Saya mencoba untuk keluar dengan benar dari pengguna admin. Ini fungsi saya:
function logout()
{
$_SESSION = array(); //destroy all of the session variables
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
session_destroy();
}
Pada dasarnya, setelah saya mengautentikasi kata sandi, saya menetapkan sesi sebagai valid (hanya 1 pengguna). Sekarang, ketika admin menekan logout, saya ingin menghancurkan sesi saat ini, dan juga menghancurkan cookie, sehingga mereka tidak bisa kembali ke halaman admin menggunakan cookie sesi yang tersimpan di browser. tetapi kode saya tidak berfungsi. saya menekan logout, dan saya bisa langsung menavigasi kembali ke halaman admin. namun, jika saya menghapus cookie saya, fungsionalitasnya sempurna. jadi apa yang salah dengan fungsi menghapus cookie di sini?
Jika Anda benar-benar ingin mencakup semua basis, cobalah lakukan:
setcookie (session_id(), "", time() - 3600);
session_destroy();
session_write_close();
Hal ini akan mencegah akses lebih lanjut ke data sesi untuk eksekusi PHP selanjutnya. Browser mungkin masih menampilkan cookie yang sedang disetel, namun super $_SESSION akan kosong
Mungkin masalah Anda bukan pada cookie, tetapi pada peramban yang menampilkan versi cache dari halaman admin Anda. Mungkinkah itu? Jika cookie menghilang ketika Anda menekan F5, kemungkinan besar memang demikian. Hal ini bisa diatasi dengan mengatur header cache-control
yang tepat.
Lihat pertanyaan SO ini tentang cara mengatur cache. Pertanyaannya adalah tentang hal yang sebaliknya (memaksa browser untuk melakukan cache) tetapi Anda akan mengetahui apa yang harus diubah untuk mematikan cache.
Sekadar tip untuk orang lain yang mengalami masalah dengan cookie sesi yang kedaluwarsa:
https://stackoverflow.com/questions/3989347/php-why-cant-i-get-rid-of-this-session-id-cookie
Selalu gunakan session_get_cookie_params() seperti pada jawaban atas pertanyaan di tautan di atas.