簡體   English   中英

為什么這個會話沒有被銷毀?

[英]Why isn't this session destroyed?

我有這個logout.php頁面,用於從我的 PHP 項目中注銷。

<?php
session_start();

$conn4=mysqli_connect("localhost", "root", "", "winkcage");
$useronline=$_SESSION["unamsession"];
$queryseen="UPDATE signup SET seen='' WHERE username='$useronline'";
$queryseenrun=mysqli_query($conn4, $queryseen);
session_destroy();
session_unset();
header('Location: login.php');
?>

[在 Firefox 和 Chrome 中]:當我點擊注銷按鈕時,頁面被重定向到login.php ,但是當我在不同的選項卡中再次加載主頁時(只有在會話沒有被破壞時才應該打開),它會加載重定向到 login.php (這將是我的索引頁)。

我不知道這段代碼有什么問題。 在 session_unset() 之前編寫 session_destroy() 有什么不同嗎? 我如何解決它?

[只有Chrome,在Firefox中也可以]:當我關閉Firefox時,會話會自動銷毀,這很明顯,但在Chrome中則不然。 Chrome 並沒有破壞它。 怎么可能? 我已經徹底檢查了我的代碼,但沒有找到任何與 cookie 相關的代碼行。

另一個問題是,當我登錄幾分鍾(我猜是 20-30)時,會話會自動銷毀。 我是否可能為此錯誤地編寫了一些代碼? 還是默認的?

不確定你是否在使用 cookie,但我認為這會解決它....

$queryseenrun=mysqli_query($conn4, $queryseen);
session_unset();
    $_SESSION = array();
    // get session parameters 
    $params = session_get_cookie_params();
    //delete the actual cppkie
    setcookie(session_name(),'', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);
    // Destroy session 
    session_destroy();
    //redirect to the index.php
    header("Location: login.php");
    exit();

來自http://php.net/manual/en/function.session-unset.php

會話未設置只是清除會話以供使用,但它不會被破壞,它仍然在用戶的計算機上。

請嘗試以下操作:

session_start();  
session_destroy();  
$_SESSION = array();  
header('Location: index.php');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM