假如我想判所某個人是否有權進入這個網頁,若沒權就把他轉到某個網頁去
這時我們通常會在網頁的最前頭加上
<?php
if($cookie_userid==''){
header("Location: http://192.168.1.253/login.html");
exit();
}
?>
但是如果IE在之前讀過該script的話,IE會cache住該頁面的資訊,結果上面範例的判斷會無效
解決之道是改成
<?php
if($cookie_userid==''){
header("Expires: Sat, 1 Jan 2005 00:00:00 GMT");
header("Last-Modified: ".gmdate( "D, d M Y H:i:s")."GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

header("Location: http://192.168.1.253/login.html");
exit();
}
?>
但我試了一下,這樣還是不行,最後只好假道Javascript來處理,改成這樣
<?php
  if($cookie_userid=='' ){
    echo '<script language="javascript">window.location.replace("http://192.168.1.253/login.html");</script>';
    exit();
  }
?>
這樣就差不多了
不用再管有沒有cache的問題了 :)
有個問題是:如果client端關了javascript,可能會有問題 ><"

jck11 發表在 痞客邦 PIXNET 留言(4) 人氣()


留言列表 (4)

發表留言
  • 翔
  • 登入狀態認證

    關於判斷是否有權進入某頁,基本上在PHP中我習慣用 cookie + session 的雙重判斷。這樣一來安全性也會提高...(聽說cookie是可以假冒的,而session則是存在伺服器端..),還有一點,使用者除了可能會關javascript外,cookie支援也可能被關掉.
  • 翔
  • 登入狀態認證

    以下的程式碼是我常用的判斷方式,供你參考..互相交流 ^^
    <?php
    session_start();
    if(isset($_SESSION['serive_login']) and isset($_COOKIE['clinet_login']) and isset($_SESSION['login_state'])) {
    if($_SESSION['serive_login']!=$_COOKIE['clinet_login'] and $_SESSION['login_state']!='true' or $_SESSION['serive_login']==null or $_COOKIE['clinet_login']==null) {
    header("HTTP/1.1 301 Moved Permanently");
    header("location:logout.php");
    exit();
    }
    }
    else {
    header("HTTP/1.1 301 Moved Permanently");
    header("location:logout.php")
    exit();
    }
    ?>
  • 翔
  • 關於cache的解決

    用PHP的header發送個過去時間的檔頭就可以解決了...以下的程式碼是我從書上學來的..
    <?php
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: post-check=0, pre-check=0', FALSE);
    header('Pragma: no-cache');
    ?>
  • 謝謝分享,有空我會試試:)

    jck11 於 2007/09/13 22:31 回覆