Thursday, December 23, 2010

[PHP] 利用header(標頭)去執行重新整理、轉頁及身分驗證...等的功能

我們可以利用header()函式去設定網頁的標頭,來達到我們要的目的,但是要注意,在header()之前不能有任何網頁資料輸出(例如:echo文字到網頁上),因為網頁標頭一定要放在所有網頁資料的最前面...
一、轉頁轉址標頭:
header('Location:http://www.google.com.tw');

二、重新整理標頭:(五秒後)
header('Refresh:5;url=http://www.google.com.tw');

三、內容類型標頭:(純文字)
header('Content-Type:text/plain');
註:瀏覽器會將網頁程式碼以純文字型態呈現,而不在是HTML編碼

四、身分驗證標頭:(防護區域名稱假設為myzone)
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate:Basic realm="myzone"');
exit('<h3>Sorry</h3>');

註1:Basic realm就是防護區域,當正確的使用者名稱和密碼成功地被輸入,瀏覽器就會記住它們,並且不會在相同防護區域中,再為後續的認證標頭展示認證視窗。
註2:exit()它只會在使用者點擊認證視窗的Cancel按鈕時,才會被呼叫。
最基本的範例:
<?php
  $username = 'rock';
  $password = 'roll';
  if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
    ($_SERVER['PHP_AUTH_USER'] != $username) || ($_SERVER['PHP_AUTH_PW'] != $password)) {
    header('HTTP/1.1 401 Unauthorized');
    header('WWW-Authenticate: Basic realm="Guitar Wars"');
    exit('<h3>Sorry</h3>');
  }
?>

備註:
1. header()之前不能有輸出 例如:echo,否則會出現錯誤。
2. header並不是立即執行,例如:
<?php

header("Location: http://www.google.com.tw");
sleep(1);
header("Location: http://www.yahoo.com.tw");
?>
實際上是會導到yahoo,所以,應養成 header Location 之後接exit的習慣,避免程式錯誤。

No comments:

Post a Comment