2015年3月24日

[教學] PHP & MySQL 學習筆記 第七堂(簡易SESSION和COOKIE建置)

非常抱歉,關於部落格內 PHP 的部分目前已經停止維護,因本人已經很久沒有寫 PHP ,且文章中所使用的 PHP 版本偏舊,希望有心學習 PHP 的朋友們,可以參考 Codecademy 的課程,或近一步嘗試 Laravel 這個 PHP 框架(可透過 laracasts 學習),若有找不到錯的學習資源也歡迎在留言串分享,方便有需要的人能夠有更多學習的管道!
在很多地方我們會暫時儲存下網友的資料,例如購物的網站會記錄下你把哪些商品放到購物車當中;有些網站則會紀錄下你已經登入過,因此你不用每次再重新打密碼,這些會需要用到SESSION和COOKIE這兩個變數,這堂課我們會簡單說明SESSION和COOKIE的使用。

先來看看最終的結果:SESSSION COOKIE
本次會學習到的函數共包含:

session_start( ):使用session前一定要有,而且前面不能包含html語法
$_SESSION[ ]:建立session
setcookie(檔案名稱,寫入內容,儲存時間):建立cookie
$_COOKIE[ ]:呼叫cookie
header("location:"):重新導向頁面

SESSION和COOKIE的差異(資料來源:馬老師雲端研究室
Session和Cookie是用來暫時儲存網友資料用的變數,其不同點如下:

Session的時效有兩個:
1.在一段時間(須看伺服器設定)與伺服器無連線的狀況之下會失效。
2.一次瀏覽時間(瀏覽器關閉後失效)

Cookie的時效:
可自行由程式設定,若無設定則為一次瀏覽時間(瀏覽器關閉後失效)

SESSION:儲存於伺服器端的個人變數(用戶無法自行清除)
COOKIE:儲存於用戶端的個人變數(用戶可以自行清除)

簡易SESSION建置

這裡,我要來寫一個網頁,第一次拜訪網頁的時候,我要輸入我的暱稱,可是之後再登入的時候(瀏覽器沒有關閉的情況下),網頁都會記得我的暱稱是什麼。

一開始我們一樣要利用DW建立一個如下的表單


把這個表單設定連結到它自己,也就是資料的輸入和讀取是在同一頁面


 再來,我們修改一下文字欄位的名稱,把它改成nickname


這時候我們就可以開始建立Session了,使用的語法是session_start()



然而,這裡會出現錯誤視窗(headers already sent by)!因為session_start()之前不能有任何HTML語法


 所以我們要把這段語法,移到整個網頁的最上面


告訴電腦把POST的資料,傳到SESSION當中記錄下來(但這樣會有錯)


然後在內文中ECHO出我們的SESSION,語法是$_SESSION[ ]

 

這時候,當你輸入完暱稱,按送出之後,下方就會有你輸入的暱稱了。
你可以去逛其他的網頁,回來的時候,你會發現,剛剛輸入的暱稱竟然不見了(這代表我們的語法有錯誤)!


原來是因為,在這裡我們資料的輸入和讀取都是在同一個頁面,我們每次重新進到這個頁面的時候,它就會抓一次新的POST(空白的),所以每次SESSION的內容都變成空白的。因此,我們要加一段if指令,告訴電腦,當我的POST不是空白的時候,再把POST傳到SESSION當中(當我們曾輸入過暱稱時,POST就會是空白,它就不會自動的把POST的內容傳到SESSION當中)。


完整的語法如下:
<?php
session_start();
IF($_POST['nickname']!=''){
 $_SESSION['nickname']=$_POST['nickname'];
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>簡易SESSION建置</title>
</head>

<body>
<p>簡易SESSION應用 </p>
<form id="form1" name="form1" method="post" action="p7-1.php">
  <p>您的暱稱:
    
    <input type="text" name="nickname" id="nickname" />
  </p>
  <p>
    <input type="submit" name="button" id="button" value="送出" />
  </p>
</form>
<?php
echo "您先前輸入的暱稱為:".$_SESSION['nickname'];
?>
<p>&nbsp;</p>
</body>
</html>


簡易COOKIE建置
我們把剛剛SESSION的檔案,這裡改成setcookie,用法是setcookie(檔案名稱,寫入內容,儲存時間)
,使用方法可以參考這裡
如果儲存時間沒填的話,cookie就會和session一樣,一旦關閉瀏覽器,儲存的資料就沒了。
這裡設定儲存一天的時間(86400秒就是一天)。
最後cookie比較特別的地方是這裡還要加一個header,header的用法,就是重新導向某一網頁,這裡則是類似重新整理的用法。



下面echo的地方也要改成COOKIE,語法同樣是$_COOKIE[ ]


這整段的程式碼如下:
<?php
<?php
IF($_POST['nickname']!=''){
// $_SESSION['nickname']=$_POST['nickname'];
 setcookie('nickname',$_POST['nickname'],time()+60*60*24);
 header("location:p7-2.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>簡易COOKIE建置</title>
</head>

<body>
<p>簡易COOKIE應用 </p>
<form id="form1" name="form1" method="post" action="p7-2.php">
  <p>您的暱稱:
    
    <input type="text" name="nickname" id="nickname" />
  </p>
  <p>
    <input type="submit" name="button" id="button" value="送出" />
  </p>
</form>
<?php
echo "您先前輸入的暱稱為:".$_COOKIE['nickname'];
?>
<p>&nbsp;</p>
</body>
</html>


試試看今天的結果吧:
SESSSION 
COOKIE

以上內容均為本人在馬老師雲端研究室學習所整理之筆記

0 意見:

張貼留言