假如我想判所某個人是否有權進入這個網頁,若沒權就把他轉到某個網頁去
這時我們通常會在網頁的最前頭加上
<?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,可能會有問題 ><"
這時我們通常會在網頁的最前頭加上
<?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,可能會有問題 ><"




登入狀態認證
關於判斷是否有權進入某頁,基本上在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');
?>
Comment Permissions: Allow commenting