首頁  >  文章  >  後端開發  >  php 中cookie和session的差異以及cookie和session的用法詳解

php 中cookie和session的差異以及cookie和session的用法詳解

怪我咯
怪我咯原創
2017-07-10 10:06:081116瀏覽

這篇文章主要介紹了PHP中cookie和session的區別及cookie和session用法小結的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下

#具體來說cookie 是保存在「客戶端」的,而session是保存在「服務端」的

cookie 是透過擴充http協定實現的

cookie 主要包括:名字,值,過期時間,路徑和域;

##如果cookie不設定

生命週期,則以瀏覽器關閉而關閉,這種cookie一般儲存在記憶體而不是硬碟上.若設定了生命週期則相反,不隨瀏覽器的關閉而消失,這些cookie仍然有效直到超過設定的過期時間。

session 一種類似散列表的形式保存資訊,


當程式需要為某個客戶端的請求建立一個session時,伺服器首先檢查這個客戶端的請求裡是否已包含了一個session標識


(稱為session id),如果已包含則說明以前已經為此客戶端創建過session,伺服器就按照session id把這個session檢索出來使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session並且產生一個與此session相關聯的session id,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的

字串,這個session id將會被在本次回應中傳回給客戶端保存。儲存這個session id的方式可以採用cookie,這樣在互動過程中瀏覽器可以自動的按照規則把這個識別傳送給伺服器。一般這個cookie的名字都是類似SEEESIONID。但cookie可以被人為的禁止,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳回伺服器。

優缺點:

#1、cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。


2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙

考慮到安全應當使用session。

3、session會在一定時間內保存在伺服器上。當訪問增多,會比較佔用你伺服器的效能

考慮到減輕伺服器效能方面,應使用COOKIE。


4、單一cookie儲存的資料不能超過4K,很多瀏覽器都限制一個網站最多儲存20個cookie。


5、所以個人建議:

將登陸資訊等重要資訊存放為SESSION


其他資訊如果需要保留,可以放在COOKIE中

Session和Cookie的使用總結:

#Session和cookie都是

asp.Net中的內建對象,至於他們有什麼區別,在這裡就不在多說,現在來說說一些比較實用點的東西:

我們知道網站都有一個後台管理系統,其中有登入和退出兩個功能,在登入的時候我們往往會把使用者的資訊儲存到session或cookie中,以便後面使用,那麼在登入的時候我們要注意哪些呢?


1、把一些敏感的東西存到session中,不太敏感的東西可以存在session或Cookie中,例如使用者名稱就是不太敏感,但是介於有些瀏覽器不支援cookie的使用,所以我們會把它存到session中,但是session有的時候在伺服器中容易丟失,所以我們可以結合cookie一起使用,就是說當session的丟失的時候,如果cookie還在我們設定的有效期內,就可以再一次從Cookie中取出值放進session裡,所以我們最好同時用session和cookie保存用戶名等資訊或在

設定檔

程式碼如下:

<sessionState timeout="2" mode="StateServer" />

來解決session丟失的問題也可以


2、我們希望後台管理在多長時間沒有操作的情況下,讓session失效,重新登錄,可以使用session .timeout=5,以分鐘為單位,表示5分鐘內沒有其他操作,就失效,或者在配置文件中配置8d16a282d6b1276845bbebf466ffd687也可以


3、cookie有效期限的設定


httpCookie.Expires = DateTime.Now.AddMinutes(2);


cookie的有效期限為2分鐘


4、頁面中判斷是否有權限存取該網頁的時候,可以如下判斷:

if (Request.Cookies["httpCookie"] != null)
{
Session["admin"] = Request.Cookies["httpCookie"].Values["admin"].ToString();
}
if (Session["admin"] == null)
{
this.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert(&#39;请重新登 录&#39;);location.href=&#39;logins.aspx&#39;</script>");
}

下面在來說說退出的時候該怎麼做比較好

1、 退出的時候session和Cookie的值都要清空,現在來簡單說說session的幾個方法的差別:


Session.clear():表示將會話中所有的session的鍵值都清空,但是session還是依然存在,同等於Session.RemoveAll()

Session[“admin”] =null:表示將制定的鍵的值清空,並釋放掉,和session[“admin”]=””不一樣,它清空了,但是session不釋放,同等於session.Remove(“name”);

Session.Abandon()就是把目前Session物件刪除了,下一次就是新的Session了。

主要的不同之處在於當使用Session.Abandon時,會呼叫Session_End方法(InProc模式下)。當下一個請求到來時將激發Session_Start方法。而Session.Clear只是清除Session中的所有資料並不會中止該

Session,因此也不會呼叫那些方法,Abandon方法用於主動結束會話,若沒有呼叫該方法,當會話逾時後,也會自動結束目前會話。

2、 下面在來看看如何清除cookie

A、tpCookie cookie = System.Web.HttpContext.Current.Request.Cookies .Get("tuser");

cookie.Expires = DateTime.Now.AddDays(-1);
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);

B、tpCookie httpCookie = Request.Cookies["httpCookie"];

httpCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(httpCookie);

AB兩種方法都可以

3、 所以session清除目前的值就可以了即Session[“admin']=null就可以了,Cookie按照以上方法清除即可

#建議與意見:

1、在退出的時候我們可以在創建一個logout的頁面來寫時間,這樣比較好一些

2、 無論在進行什麼操作的時候,能用If判斷是否為空的情況下就盡量的判斷,防止出現了空指針異常

以上是php 中cookie和session的差異以及cookie和session的用法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn