cookies和session是web開發中比較重要的知識點,在編程中都是貫穿始終的。php
會話能夠簡單理解爲,用戶打開一個瀏覽器,點擊多個超連接,訪問服務器多個web資源,而後關閉瀏覽器,整個過程稱之爲一個會話。html
每一個用戶在使用瀏覽器與服務器進行和會話的過程當中。都會產生一些數據。好比購物車,每一個用戶查看購物車的時候,都能看到本身的選擇,可是他們用的都是一套系統(簡單的說都是訪問的後臺的相同php文件),那麼如何才能讓不一樣的人看到本身的購物車裏面的內容呢。前端
思路:保存在數據庫裏面, 這是一個不錯的方案,它的優缺點咱們在後面再討論。還有那麼一些視頻網站,能夠保存你上次看過電影(在你尚未登錄的時候),如何解決?linux
這裏先講解一些會話技術的相關基礎知識。web
這兩個東西是有千絲萬縷的聯繫的,咱們先講cookies而後講session.sql
session與http協議有着莫大的關係,若是你以前瞭解http協議的話,你會有一個深刻的瞭解,若是沒有基礎也不要緊。數據庫
好比https://www.baidu.com 前面爲何要加https?是由於在網絡傳輸中有着各類各樣的協議,就像雙方(發送方和接受方)達成約定。咱們開始吧。apache
你們在訪問某個網站的時候,是否能看到提示你上次登錄網站的時間,好比一些銀行,郵箱,或者qq,都會提示你曾經在何時登錄過。如何實現的? 還有在瀏覽好比淘寶京東的時候,提示你上次瀏覽的商品有哪些,不一樣用戶瀏覽過的商品確定不同,這是怎麼實現的呢?編程
如何提示用戶上次登陸網站的時間。如何保存上次用戶瀏覽的信息,如何保證用戶在必定時間內,不用反覆登錄。後端
在英文中是小甜餅的意思,它是一種客戶端技術,服務器把每一個用戶的數據以cookies的形式寫給用戶各自的瀏覽器。哈哈~平時是否是常常在瀏覽器中看見清除(cookies)之類的提示啊。當用戶經過一個瀏覽器再去訪問服務器中的web資源時,就會帶着各自的數據區,這樣!web處理的就是用戶各自的數據了!
服務器在客戶端保存用戶的信息,這些信息就像是小甜餅同樣,數據量並不大,服務器端在須要的時候能夠從客戶端讀取,保存在客戶端的瀏覽器緩存目錄下,都很小!!通常在2~3k以內。經過set-cookie的HTTP協議獲取。
保存上次登錄時間信息等等,保存用戶名,密碼,在必定時間不用從新登錄,記錄用戶訪問網站的喜歡,好比google打開首頁,自定義首頁。
cookie 在客戶機的某一個目錄,根據你的瀏覽器,會有不一樣的保存方式,保存的路徑還與操做系統有關。
這裏咱們以實驗樓 linux系統 火狐瀏覽器爲例子。(Windows下自行搜索)進入 firefox 的目錄(須要先打開一次瀏覽器)。
cd ~/.mozilla/firefox #而後進入第二個文件夾(不一樣環境可能有所區別)
能夠看到裏面有個 cookie.sqlite 文件,這個是一個數據庫格式文件,可見Firefox 將 cookie 數據存入了數據庫。 咱們能夠開打火狐瀏覽器查看具體的 cookie 信息:
能夠看見裏面有各類站點顯示的文件。其實就是鍵值對的字符串。
接下來咱們來寫一個用 PHP 操做 cookie 的示例,能夠在
php手冊http://php.net/manual/zh/features.cookies.php中查看更多關於cookie的講解和用法。
一、開啓Apache服務器
service apache2 start
二、進入Web根目錄
cd /var/www/html
三、修改讀寫權限
sudo chmod -R 777 /var/www/html
四、新建cookie1.php,寫入如下代碼
<?php //演示如何建立cookies信息 //把用戶名和密碼保存在客戶端的cookies //這個函數用來保存cookie //key--value的形式保存 setcookie("name","shiyanlou",time()+3600); echo "success!"; ?>
五、瀏覽器測試
打開 Firefox 瀏覽器,輸入地址:localhost/cookie1.php。
輸出 success!,說明咱們的cookie 信息已經被成功寫入。按照上面的流程,查看此時瀏覽器中所有cookie信息,就會發現了多個一條記錄:
由於咱們這裏只有一個請求,因此還能夠經過另一種方式查看cookie 信息:
這是它的一個初步使用.
注意保存多少時間是 time()+3600,time() 是當前的Unix時間戳。
代碼說明:
把cookie取出來 (超時以後就取不出來了)
新建 cookie2.php:
//cookie2.php <?php //獲取cookie信息 echo "<pre>"; print_r($_COOKIE); echo "<pre>"; $name=$_COOKIE['name']; echo "name".$name; ?>
由於在 cookie1.php 中,咱們將cookie的有效時間設置爲當前時間+3600s,即有效期爲一小時。因此如今是可以取到的,爲了方便測試,這裏講 cookie1.php 中cookie的有效期設置爲5s。固然,若是你願意等一個小時的話,也是能夠的。修改以後,執行 cookie1.php,等待5s以後,再執行 cookie2.php:
cookie 能夠分別設置各個鍵值對保存的時間,如:
setcookie('name','shiyahlou',time()+100) setcookie('age',10,time()+200).
上面的代碼說明了 cookie 過了有效期以後,就會失效,爲何呢?其實這個跟http協議有關,它發包的時候沒有帶 cookie 了(由於超時過時了),http協議規定要攜帶網站cookie,全部web開發都遵循此規範。
這個機制是http協議規定的。
能夠保存多個數據,使用明文方式!!因此若是用cookie來保存密碼是很是危險的。
setcookie("name","passwd",time()+3600); setcookies("name","shiyanlou1",time()+60); //這個值在一分鐘後會過時setcookies("name","shiyanlou2",time()+3600); setcookies("name","shiyanlou3",time()+3600); setcookies("name","shiyanlou4",time()+3600);
更新
如何更新 cookie 信息?首先必須是是針對一個用戶,setcookie 會覆蓋以前的記錄,在 /var/www/html 目錄下建立文件 cookie3.php ,編輯以下:
<?php setcookie("name","shiyanlou",time()+300); echo "name is shiyanlou! <br>"; //更新 setcookie("name","chengdu",time()+300); echo "update record, name is chengdu";; ?>
本身能夠試試哦,打開瀏覽器,輸入 localhost/cookie3.php,再次查看cookie信息,發現果真變化了。
刪除
其實刪除數據是經過修改cookie的有效時間來實現的。
在/var/www/html 目錄下建立 cookie4.php ,編輯以下:
<?php //刪除指定鍵名cookie setcookie("key","",time()-200); //刪除全部,當所有刪掉的時候,文件夾也會被刪掉 foreach($_COOKIES as $key => $val) { setcookie($key, "", time()-1); } ?>
需求:登陸頁面信息展現
具體分析:
實現這個功能須要一個前端界面,一個後端數據處理。
前端頁面:login.php
<html> <head></head> <body> <h1>Login In</h1> <form action="loginProcess.php" method="post"> <table> <tr> <td>User id</td> <td><input type="text" name="id"/></td> </tr> <tr> <td>password</td> <td><input type="passwd" name="password"></td> </tr> <tr> <td><input type="submit" value="login"/></td> <td><input type="reset" value="reset"/></td> </tr> </table> </form> </body> </html>
後端邏輯:loginProcess.php
這段代碼的做用就是檢驗 cookie 是否爲空,爲空則說明是第一次登錄,不爲空則說明不是第一次登錄,就把上次登錄的時間打印出來。而後這一段代碼能夠封裝成爲一個函數,用的時候再require一次。
<?php echo "welcome, ".$_POST['id'].", login success!!"; echo "<br/><a href='login.php'>Back to login</a>"; if(!empty($_COOKIE['lastVist'])){ echo "your last login time:".$_COOKIE['lastVist']; //更新時間 setcookie("lastVist",date("Y-m-d H:i:s"),time()+24*3600*30); }else{ //用戶第一次登錄 echo "you first login time:"; setcookie("lastVist",date("Y-m-d H:i:s"),time()+24*3600*30); } ?>
打開瀏覽器,輸入地址:localhost/login.php。輸入登陸信息,就能夠看到效果了。測試過程當中,別忘了看看瀏覽器中cookie的變化。
本次實驗主要向你們介紹與cookie相關的基礎知識,並使用PHP對cookie進行寫入,讀取,更新和刪除操做,同時還了解了cookie的有效期的概念,經過實際的項目實踐PHP對cookie的操做。更多關於cookie的知識和用法請查閱PHP手冊。
文章所有內容截選自實驗樓教程【PHP會話控制】,該教程總共4節內容,文章屬於第一節內容,主要講的是PHP中的cookie 基礎和應用;後面三節分別是:cookie 的實戰應用、session基礎與實戰、session的實戰應用,若是想要查看所有內容,點擊【PHP會話控制】便可~