iT邦幫忙

DAY 17
3

遭遇PHP之經驗分享系列 第 17

[鐵人賽Day17]當PHP相遇Cookie與Session所擦出的火花

記得在新手村徘徊時,常聽到Session跟Cookie就覺得,哇~好酷啊
但實際自己在用的時候,卻痛哭流涕...因為時常有個問題困惱著我,而現在想起來感覺自己傻傻的
那就是...A頁設定Cookie變數,到B頁卻用Session要去取值,或者相反@@

首先,來了解一下Session 與 Cookie 的差異
Cookie:儲存資料於用戶端,伺服器不必負擔紀錄下來檔案的負荷量,但是用戶有可能會關閉Cookie
Session:儲存資料於伺服器端,紀錄下來的檔案量由由伺服器負荷,但好處是不用煩惱用戶會關閉Session的問題

而在安全方面,由於Cookie是儲存在用戶端,所以被截取的機率較高
因此較重要的資料應用Session,而比較沒這麼重要的資料可以用Cookie紀錄

然而,這種暫存紀錄的方法經常運用於會員系統、購物車等等地方‧‧‧‧‧‧

Cookie的使用方法:
(參考資料:
setcookie:http://php.net/manual/en/function.setcookie.php
$_COOKIE:http://php.net/manual/en/reserved.variables.cookies.php)

啟用Cookie,並設定數值
通常setcookie會常用到的三個參數:setcookie ( $name, $value, $expire)
$name:變數名稱
$value:變數值
$expire:變數存活時間,常與time()配合使用,EX:time()+60*60*24*30 等於 一個月(三十天)後才過期

<?php
     setcookie( "test", "Good_Idea", time()+3600); //變數為test,變數值為Good_Idea,存活時間一小時(3600秒) 
?>

接著就是要試看看把剛設定好的Cookie給取值出來
(記得,這裡的$_COOKIE["XXX"]的COOKIE一定要大寫,小寫會報錯誤訊息)

<?php
     echo $_COOKIE["test"]; //讀取變數
​?>

當用完COOKIE想釋放清除它時,需將變數值設成空
但這樣還不夠的,還記得在設定時我們給他存活時間3600秒嗎
那這樣就算變數值設空值,變數也還是要等到3600秒後
那樣的話,乾脆把存活時間設定為現在時間前3600秒,較為保險安全

<?php
     setcookie( "test", "", time()-3600);
?>

Session的使用方法:
(參考資料:
session_start:http://php.net/manual/en/function.session-start.php
$_SESSION:http://php.net/manual/en/reserved.variables.session.php)

啟用Session

<?php
     session_start();
​?>

設定Session數值

<php
      $_SESSION['test']="Good_Idea";
​?>

接著要把變數印出來,以確定我們做法是對的

<?php
     echo $_SESSION['test'];
​?>

當用完Session想釋放清除它,可使用session_unset('Session變數')或unset('$_SESSION['變數']')把變數釋放掉

<?php
     session_unset("test");
     //unset($_SESSION['test']);
?>

而以上是清空單一Session,那如果要清空全部呢?!
只要在session_unset()函數別指定變數就是全部清空了

<?php
     session_unset();
?>

(參考資料:
unset:http://php.net/manual/en/function.unset.php
session_unset:http://php.net/manual/en/function.session-unset.php)

試著做出一個表達Session使用方法的範例,程式碼如下:
「session.php」

<?php
session_start(); //啟動Session
$_SESSION['test']="Good_Idea"; //設置Session變數

echo "\$_SESSION['test']變數值:".$_SESSION['test'];

echo "<hr />";

//使用isset()函數檢查變數是否有被設置
echo("清空Session變數前:");
if(isset($_SESSION['test'])){
        echo("有設置變數");
    }else{
        echo("未設置變數");
    }
    
echo "<hr />";

session_unset("test");
//unset($_SESSION['test']);

echo("清空Session變數後:");
if(isset($_SESSION['test'])){
        echo("有設置變數");
    }else{
        echo("未設置變數");
    }
?>

上一篇
[鐵人賽Day16]PHP字串-東拆西拆之先explode後implode
下一篇
[鐵人賽Day18]使用Google API產生QR code
系列文
遭遇PHP之經驗分享30

尚未有邦友留言

立即登入留言