---恢復內容開始---php
自己web 與服務器的交互是經過HTTP協議來實現的,而HTTP協議又是無狀態協議。就是說明HTTP協議沒有一個內建機制來維護web與服務器之間的狀態。因此同一個用戶請求同一個頁面兩次的時候,HTTP協議不會認爲這兩次請求來自同一個web,會把這兩次請求隔離開。會認爲是兩個不一樣的用戶來請求的。若是這個用戶執行了登錄操做,再次請求頁面。HTTP協議不會認爲該用戶作過登錄操做。由於HTTP協議沒法保留登錄狀態,沒法在不一樣頁面之間進行跟蹤和狀態保持。會話控制就是保留用戶的狀態,用來跟蹤和對用戶的狀態保持。html
cookie是一種由服務器發給客戶端的片斷信息,存儲在客戶端瀏覽器的內存或者硬盤當中的技術。mysql
就是存儲在瀏覽器當中的一個文件。web
cookie的優勢和缺點redis
優勢:cookie存儲在客戶端,不會佔用服務器端的資源。sql
缺點:也是存儲在客戶端,不建議將一些敏感重要的數據保存到cookie當中。並且用戶有權限在瀏覽器禁止cookie的使用,一旦用戶禁止cookie沒法保存用戶信息。跨域
cookie的不可跨域名性瀏覽器
不可跨域名性是什麼意思呢?目前不少網站都會使用cookie,好比客戶端說訪問A網站,A網站會給客戶端頒發一個cookie。客戶端訪問B網站,B網站也會給客戶端頒發一個cookie。那麼客戶端訪問B網站會不會帶着A網站的cookie?B網站可不能夠修改A網站頒發給客戶端的cookie呢?安全
答案確定是不能夠的。cookie具備不可跨域名性,根據cookie的規範,客戶端訪問B網站只會攜帶B網站頒發的cookie,從而B網站只能操做B網站頒發的cookie,不能修改A網站的cookie。服務器
cookie是客戶端瀏覽器來管理的,瀏覽器能保證B只操做B不會操做A,從而保證用戶的隱私安全。
瀏覽器又是怎麼管理的呢?
瀏覽器判斷一個網站可否操做另外一個網站的cookie是根據域名,A網站和B網站的域名不一樣,因此B不能修改A的cookie。
cookie的操做 存儲cookie setcookie(name,value,expire,path,domain,secure) 參數 name 鍵名 value 存儲的cookie值 expire cookie過時時間 path 規定的cookie服務器路徑 domain 規定cookie的域名 secure 是否經過HTTP傳輸cookie 讀取cookie $_COOKIE 刪除cookie setcookie(name,'',time()-1000);
session是存在服務器的一種用來存放用戶數據的類hashtable結構。
當瀏覽器向服務器發送第一次請求的時候。服務器會生成一個hashtable和一個sessionid,sessionid用來標識hashtable,服務器返回瀏覽器的時候會把sessionid一塊兒返回。第二次瀏覽器請求的時候會攜帶第一次的sessionid,服務器根據sessionid來查找相匹配的hashtable.
session的優勢和缺點
優勢:安全性高 缺點:佔用服務器資源。
推薦一個詳解cookie和session的博客:http://www.javashuo.com/article/p-ryxhflmu-cq.html
使用session 首先開啓session session_start() 操做session $_SESSION; 這裏不詳細介紹 能夠參考百度 清除session $_SESSION = []; session_distory(); 刪除session文件並把sessionid刪除 session相關配置 session.auto_start session是否自動開啓 session.cookie_domain session的有效域名 session.cookie_lifetime session存儲在cookie的最大生命週期 session.cookie_path session存儲在cookie的路徑 session.name cookie存儲sessionid的鍵名 session.save_path session存儲在服務器的路徑 session.use_cookies 是否使用cookie傳遞sessionid session.use_trans_id 是否可使用鏈接傳遞sessionid session垃圾回收機制 session.gc_probability 清理次數 session.gc_divisor 請求次數 session.gc_maxlifetime 最大生命週期 超過生命週期 視爲垃圾 到達訪問次數 就會清理一次垃圾 session.save_handle session存儲方式 如:mysql redis memcache
一、cookie保存在客戶端,服務器能夠知道其中的信息。session存儲在服務器端,客戶端不知道其中的信息。
二、session保存的是對象,cookie保存的是字符串。
三、session不能區分路徑,在同一個網站下在全部地方均可以訪問到session,若是cookie設置了路徑,那麼同一個網站下不一樣路徑的cookie互相是不能訪問的。
session是依賴於cookie才能正常工做,若是用戶在客戶端禁用了cookie那麼session也將失效。
爲何cookie禁用session也失效?
由於session在客戶端也須要保存一個惟一標識(就是sessionid),那麼就須要用到cookie,sessionid是存在cookie當中的,使用$_COOKIE['PHPSESSID']能夠獲取sessionid,因此禁掉cookie,session也不能使用。
禁用cookie後如何傳遞sessionid值?
一、能夠修改配置
session.use_cookies = 0;設置客戶端不用cookie保存sessionid值
session.use_only_cookies = 1; 是否只使用cookie傳遞sessionid
session.use_trans_sid = 1; url自動加上PHPSESSID 這樣session正常使用
二、使用url傳遞sessionid
<a href="indx.php?<?php echo session_name(). '=' .session_id();?>"></a>
SID常量在禁用cookie的時候就是session_name和session_id的拼接,不然就是null
<a href="indx.php?<?php echo SID;?>"></a>