記錄帳號及密碼:使用 Session(使用Cookie相同範例)

第一個檔案:a.php
<html><body>
<a href='b.php'>記錄session值: 連到b.php</a><br>
<a href='c.php'>顯示session值: 連到c.php</a><br>
<a href='d.php'>清除session值: 連到d.php</a><br>
</body></html>
第二個檔案:b.php
<?php
  $UserAcc = "Dana";
  $UserName = "牛牛";
  $UserPass = "1234";
  
  session_register("UserAcc");
  session_register("UserName");
  session_register("UserPass");
?>
設定完成
第三個檔案:c.php
<?php
  session_start();
  echo "你的帳號是:".$UserAcc."<br>";
  echo "你的名字是:".$UserName."<br>";
  echo "你的密碼是:".$HTTP_SESSION_VARS["UserPass"]."<br>";
  if (session_is_registered("UserPass")) echo "密碼雜湊是:".md5($UserPass);
?>
第四個檔案:d.php
<?php
  session_start();
  session_destroy();
?>
清除完成
先執行a.php(結果如下),再點擊畫面上的各個連結(b.php或c.php或d.php),看看會有什麼結果?
記錄session值: 連到b.php
顯示session值: 連到c.php
清除session值: 連到d.php
函式:
  1. session_start()
    所有使用任何session函式前,必先執行這個函式
  2. session_register("變數名稱")
    註冊一個session
  3. session_is_registered("變數名稱")
    是否已註冊這個session
  4. session_destroy()
    清除所有的session
說明:
  1. 設定session()前,不可以輸出任何空白、字串、數字、HTML語法等,否則會造成程式錯誤,而且無法設定Cookie!
  2. Session變數的規則與一般變數相同,錢字號($)開頭,字首為字母,可以數字、字母或底線(_)
  3. $HTTP_SESSION_VARS["變數名稱"] 效果與 $變數名稱 一樣,不過很顯然這樣比較明確,可讀性比較高。
    有時可能因為PHP版本不同,而必須使用這樣的方式。
  4. 配合HTML的FORM,讓使用者從網頁可輸入帳號及密碼,再用session_register()記錄起來,之後使用者在瀏覽其他網頁時,就可以不用再輸入帳號及密碼了。
除錯:
  1. Warning: Cannot send session cache limiter - headers already sent (output started at b.php:2) in b.php on line 7
    在b.php檔案裡,在第七行設定的Session之前,已經在第二行輸出了其他字元!
    請檢查b.php檔,絕不可在session_start()之前輸出任何空白、字串、數字,或是有HTML語法等。
  2. Warning: Trying to destroy uninitialized session in d.php on line 3
    在d.php檔案裡,在第三行設定的Session函式之前,未使用session_start()函式。
    請檢查d.php檔,在各種session函式(例如:session_destroy, session_is_registered)之前,應先使用session_start()函式。

作者:Dana, cowwu@ms15.hinet.net, 2004/03/11
本文章公開於個人網站 http://www.dana.idv.tw
Home Copyright © Shu-Chen Wu