2021年2月8日 星期一

PHP 用 header("Location: address") 跳轉後瀏覽器網址列沒有更改問題

這幾天在寫 jQuery Mobile 行動網頁遇到一個之前沒有注意到的問題 : 使用者按下登出按鈕後我用 session_start() 開啟 Session 功能, 再呼叫 session_destroy() 刪除全部已建立的 Session 資料, 然後呼叫 header("Location: vaccine.htm") 跳回到登記頁面, 程式如下 :

#vaccine_logout.php
<?php
//啟動 session 功能
session_start();
session_destroy(); //刪除 session 檔
header("Location: vaccine.htm");
?>

結果跳是跳了, 但是瀏覽器網址列卻沒變 (仍然是 vaccine_admin.php), 導致登記頁面也無法操作 (page 堆疊沒更新?). 在 Stackoverflow 找到下面這篇解決了此問題 : 


其中有兩點很值得記下來. 其一是編號 76 所言, Location 後面需緊接冒號, 不可有空白, 上面程式碼符合, 這沒問題. 其二是編號 19 回覆的, 原網頁 vaccine_admin.php 中的登出按鈕必須添加 data-ajax="false", 因為 jQuery Mobile 預設是 Ajax 模式, 必須將其關閉 :

      <header data-role="header" data-add-back-btn="true">
        <h1>系統管理</h1>
        <a href="vaccine_logout.php" class="ui-btn-right" data-ajax="false">登出</a>
      </header>

將按鈕的 Ajax 關閉後果然就正常了. 

沒有留言 :