200 likes | 383 Views
PHP. Cookie. Cookie. 將少量資料儲存 (by 檔案 ) 在遠端個人電腦的技術。 C:Documents and Settings 電腦帳號 Cookies (Windows NT/2000/XP) 或 C:Documents and Settings 帳號 Local SettingsTemporary Internet Files Cookie 的檔案名稱「可能」 是: tceb@km.tceb.edu[1].txt ( 就是 主機使用者帳號@網址 .txt ) 它的內容可能是:
E N D
PHP Cookie
Cookie • 將少量資料儲存(by檔案)在遠端個人電腦的技術。 C:\Documents and Settings\電腦帳號\Cookies (Windows NT/2000/XP)或 C:\Documents and Settings\帳號\Local Settings\Temporary Internet Files\ • Cookie的檔案名稱「可能」 是: • tceb@km.tceb.edu[1].txt (就是 主機使用者帳號@網址.txt ) • 它的內容可能是: • phpbb2km_data (cookie 名稱)s%3A0%3A%22%22%3B (cookie 值)km.tceb.edu.tw/ (cookie 網域及路徑)15361695667229648268411619276829574842*
Cookie • 使用者可以設定拒絕。 • 哪個瀏覽器設定的cookie,只能在該瀏覽器使用。 • 以IE為例 • [工具] [Internet選項] [隱私]
Cookie的限制 • 每個使用者的瀏覽器只能支援(存取)300個Cookie • 每個Cookie的大小最多僅4k Bytes的容量 • 有些瀏覽器可以把Cookie的功能關掉,若關掉後 • Cookie就不能使用
Cookie的存取 設定: boolean setcookie (變數名,值,有效時間,路徑,領域,安全性) Setcookie(“A”, 10); Setcookie(“B”,”20”,time()+3600); Setcookie(“C”,”hello”,time()+7200,”./test/”,”abc.def.tw”,1); 必須在任何輸出前設定cookie 取出: $_COOKIE陣列 範例18-1 + 18-2
Cookie的存取 哪個瀏覽器設定的cookie,只能在該瀏覽器使用。否則要設定有效時間。 time()+3600 mktime(時,分,秒,月,日,年) 可以用來刪除cookie 範例18-4
PHP Session
Session • 將資料儲存在伺服器的技術。 • 檔案位置 • Session是將使用者資訊儲存在Server 端暫存檔中,儲存的位置是依照 • php.ini 的設定: • session.save_path = /tmp • Session的檔案名稱「可能」是 : • sess_3dd484f2bab6a2d2509e9850dae3b897(就是 sess_ 開頭,加上 32字元的亂數雜湊編碼所組成的檔名) • 它的內容可能是: • check|s:3:"yes";var1|s:1:"4";var2|s:1:"5"; • 其實PHP的Session內容就是「變數名稱|變數類型:長度:內容;」的組合
Session • 每次連線都有一個session id • 要啟動才可以使用。 • php.ini中的session.auto_start參數需設定為1 針對$_SESSION、$HTTP_SESSION_VARS而言 • Session_start() • 變數需要先註冊 • Session_register(變數名) • Session_unregister(變數名) • $_SESSION陣列存取 • 所有的session放在session.save_path目錄中(php.ini) 範例18-5, 18-6
Session 使用Session時,有三個程序: 第一:啟動session功能 ─ 使用 session_start( ) 函數 第二:註冊session變數 ─ 使用 session_register( ) 函數(或用$_SESSION、$HTTP_SESSION_VARS ) 第三:清除session變數或檔案 ─ 使用 session_unregister( )或 session_destroy( )函數 取得 session 的id值(與session檔案名稱,就是sess_後面接的32字元) ─ 使用 session_id ( )函數 查看要傳遞的變數是否已被註冊 ─ 使用 session_is_registerd( ) 函數
Session register <?php/*註冊session的變數名稱 abc,並將值置入。注意,在session_register( ) 函數內,註冊的是名稱的「字串」,不用加「$」。 */ $abc = "最原始的方法"; session_register("abc"); //這是利用所謂_SESSION方式註冊變數名稱「 xyz 」及值。 $_SESSION["xyz"] = "第二種方法"; //這是利用所謂HTTP_SESSION_VARS方式註冊變數名稱「 third 」及值。 $HTTP_SESSION_VARS["third"] = "第三種方法"; ?> 請特別注意,如果在session_register( )函數前沒有使用 session_start( )來啟動時,會自動呼叫 session_start( );而 $_SESSION 及 $HTTP_SESSION_VARS 方式並不會呼叫 ,須在使用前事先 session_start( ) 才有作用。
Session unregister <?php session_start( ); session_unregister("abc"); //假設 $abc = "123“ ?> 注意:須先啟動session_start( )函數才可正常清除。
Session傳遞 (共用) • 透過URLs • (網址?PHPSESSID=3dd484f2bab6a2d2509e9850dae3b897) 如果php.ini將「session.use_trans_sid」設定為「0」 • 透過Cookie • php.ini有將「session.use_trans_sid」設定為「1」
Session傳遞 • aa.php • <?php • session_start(); //啟動 session • echo '>>第一頁<<'; • $_SESSION['color'] = '藍色'; • $_SESSION['city'] = '台中市'; • $_SESSION['time'] = date("Y年m月d日 H時i分s秒"); • // 連結另一個php程式, • // 如果可以使用 cookie方式, • //注意這裡用單引號 • echo '<br /><a href=“bb.php">第二頁(cookie)</a>'; • // 如果需用利用url方式傳遞 • echo '<br /><a href=“bb.php?'.SID. '">第二頁(URLs)</a>'; • ?>
Session傳遞 • bb.php • <?php • session_start(); • echo '>>第二頁<< <br />'; • echo $_SESSION['color']."<br>"; • echo $_SESSION['city']."<br>"; • echo date("Y年m月d日 H時i分s秒")." ==> ".$_SESSION['time']; • // 如果需用傳遞回第一頁 • echo '<br /><a href=“aa.php?'. SID . '">第一頁</a>';?>
Session destroy <?php //啟動session session_start( ); /*清除session檔裡所有的資料; 如果要使用session_destroy( )函數,這動作可有可無。 */ session_unset( ); //刪除session檔 session_destroy( ); ?> 注意:須先啟動session_start( )函數才可正常運作。
安全性 在使用者登入時,在session資訊中即加入使用者的IP,然後再不同程式啟動session的同時,也連帶檢查是否來自同一個IP,如果發現不同時,就拒絕使用,並立即刪除這個session的檔案。
安全性 Ch17-4-1.php <?phpsession_start(); //啟動 session echo ">>> 第 一 頁 <<< <br />";if ( !empty($_SERVER["HTTP_X_FORWARDED_FOR"]) ) {echo "有經過期他代理主機:".$_SERVER["HTTP_X_FORWARDED_FOR"];$temp_ip = split(",", $_SERVER["HTTP_X_FORWARDED_FOR"]);$user_ip = $temp_ip[0];} else {$user_ip = $_SERVER["REMOTE_ADDR"];} echo "<br /? 使用者IP : $user_ip "; session_register ("user_ip"); //注意這裡用單引號 echo '<br /><a href="ch17-4-2.php?'.SID.'">第二頁</a>';?>
安全性 Ch17-4-2.php <?phpsession_start(); //啟動 session echo ">>> 第 二 頁 <<< <br />"; if ( !empty($_SERVER["HTTP_X_FORWARDED_FOR"]) ) {$temp_ip = split(",", $_SERVER["HTTP_X_FORWARDED_FOR"]);$user2_ip = $temp_ip[0];} else {$user2_ip = $_SERVER["REMOTE_ADDR"];} echo "<BR />原來session的IP:".$_SESSION["user_ip"];echo "<br />目前使用者IP : $user2_ip "; if ( $_SESSION["user_ip"] != $user2_ip ) { echo "您不是原來登入的IP,請正常登入!!<br>"; session_destroy (); } else { echo "OK! <br />"; } //注意這裡用單引號echo '<br /><a href="ch7-4-1.php">第一頁</a>';?>