非常抱歉,關於部落格內 PHP 的部分目前已經停止維護,因本人已經很久沒有寫 PHP ,且文章中所使用的 PHP 版本偏舊,希望有心學習 PHP 的朋友們,可以參考 Codecademy 的課程,或近一步嘗試 Laravel 這個 PHP 框架(可透過 laracasts 學習),若有找不到錯的學習資源也歡迎在留言串分享,方便有需要的人能夠有更多學習的管道!
在很多地方我們會暫時儲存下網友的資料,例如購物的網站會記錄下你把哪些商品放到購物車當中;有些網站則會紀錄下你已經登入過,因此你不用每次再重新打密碼,這些會需要用到SESSION和COOKIE這兩個變數,這堂課我們會簡單說明SESSION和COOKIE的使用。
session_start( ):使用session前一定要有,而且前面不能包含html語法
$_SESSION[ ]:建立session
setcookie(檔案名稱,寫入內容,儲存時間):建立cookie
$_COOKIE[ ]:呼叫cookie
header("location:"):重新導向頁面
$_SESSION[ ]:建立session
setcookie(檔案名稱,寫入內容,儲存時間):建立cookie
$_COOKIE[ ]:呼叫cookie
header("location:"):重新導向頁面
SESSION和COOKIE的差異(資料來源:馬老師雲端研究室)
Session和Cookie是用來暫時儲存網友資料用的變數,其不同點如下:
Session的時效有兩個:1.在一段時間(須看伺服器設定)與伺服器無連線的狀況之下會失效。2.一次瀏覽時間(瀏覽器關閉後失效)Cookie的時效:可自行由程式設定,若無設定則為一次瀏覽時間(瀏覽器關閉後失效)SESSION:儲存於伺服器端的個人變數(用戶無法自行清除)COOKIE:儲存於用戶端的個人變數(用戶可以自行清除)
簡易SESSION建置
然而,這裡會出現錯誤視窗(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> </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> </p> </body> </html>
0 意見:
張貼留言