詳解PHP中cookie和session的區(qū)別及cookie和session用法小結(jié)
具體來(lái)說(shuō) cookie 是保存在“客戶(hù)端”的,而session是保存在“服務(wù)端”的
cookie 是通過(guò)擴(kuò)展http協(xié)議實(shí)現(xiàn)的
cookie 主要包括 :名字,值,過(guò)期時(shí)間,路徑和域;
如果cookie不設(shè)置生命周期,則以瀏覽器關(guān)閉而關(guān)閉,這種cookie一般存儲(chǔ)在內(nèi)存而不是硬盤(pán)上.若設(shè)置了生命周期則相反,不隨瀏覽器的關(guān)閉而消失,這些cookie仍然有效直到超過(guò)設(shè)定的過(guò) 期 時(shí)間。
session 一種類(lèi)似散列表的形式保存信息,
當(dāng)程序需要為某個(gè)客戶(hù)端的請(qǐng)求創(chuàng)建一個(gè)session時(shí),服務(wù)器首先檢查這個(gè)客戶(hù)端的請(qǐng)求里是否已包含了一個(gè)session標(biāo)識(shí)
(稱(chēng)為session id),如果已包含則說(shuō)明以前已經(jīng)為此客戶(hù)端創(chuàng)建過(guò)session,服務(wù)器就按照session id把這個(gè)session檢索出來(lái)使用(檢索不到,會(huì)新建一個(gè)),如果客戶(hù)端請(qǐng)求不包含session id,則為此客戶(hù)端創(chuàng)建一個(gè)session并且生成一個(gè)與此session相關(guān)聯(lián)的session id,session id的值應(yīng)該是一個(gè)既不會(huì)重復(fù),又不容易被找到規(guī)律以仿造的字符串,這個(gè)session id將被在本次響應(yīng)中返回給客戶(hù)端保存。保存這個(gè)session id的方式可以采用cookie,這樣在交互過(guò)程中瀏覽器可以自動(dòng)的按照規(guī)則把這個(gè)標(biāo)識(shí)發(fā)送給服務(wù)器。一般這個(gè)cookie的名字都是類(lèi)似于SEEESIONID。但cookie可以被人為的禁止,則必須有其他機(jī)制以便在cookie被禁止時(shí)仍然能夠把session id傳遞回服務(wù)器。
優(yōu)缺點(diǎn):
1、cookie數(shù)據(jù)存放在客戶(hù)的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙
考慮到安全應(yīng)當(dāng)使用session。
3、session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪(fǎng)問(wèn)增多,會(huì)比較占用你服務(wù)器的性能
考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE。
4、單個(gè)cookie保存的數(shù)據(jù)不能超過(guò)4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie。
5、所以個(gè)人建議:
將登陸信息等重要信息存放為SESSION
其他信息如果需要保留,可以放在COOKIE中
Session和Cookie的使用總結(jié):
Session和cookie都是asp.Net中的內(nèi)置對(duì)象,至于他們有什么區(qū)別,在這里就不在多說(shuō),現(xiàn)在來(lái)說(shuō)說(shuō)一些比較實(shí)用點(diǎn)的東西:
我們知道網(wǎng)站都有一個(gè)后臺(tái)管理系統(tǒng),其中有登錄和退出兩個(gè)功能,在登錄的時(shí)候我們往往會(huì)把用戶(hù)的信息保存到session或者cookie中,以便后面使用,那么在登錄的時(shí)候我們要注意哪些呢?
1、把一些敏感的東西存到session中,不太敏感的東西可以存在session或者Cookie中,比如用戶(hù)名就是不太敏感,但是介于有些瀏覽器不支持cookie的使用,所以我們會(huì)把它存到session中,但是session有的時(shí)候在服務(wù)器中容易丟失,所以我們可以結(jié)合cookie一起使用,就是說(shuō)當(dāng)session的丟失的時(shí)候,如果cookie還在我們?cè)O(shè)定的有效期內(nèi),就可以再一次從Cookie中取出值放進(jìn)session里,所以我們最好同時(shí)用session和cookie保存用戶(hù)名等信息或者在配置文件里
<sessionState timeout="2" mode="StateServer" />
來(lái)解決session丟失的問(wèn)題也可以
2、我們希望后臺(tái)管理在多長(zhǎng)時(shí)間沒(méi)有操作的情況下,讓session失效,重新登錄,可以使用session.timeout=5,以分鐘為單位,表示5分鐘之內(nèi)沒(méi)有其他操作,就失效,或者在配置文件中配置<sessionState timeout="5" mode="InProc" />也可以
3、cookie有效期的設(shè)置
httpCookie.Expires = DateTime.Now.AddMinutes(2);
cookie的有效期為2分鐘
4、頁(yè)面中判斷是否有權(quán)限訪(fǎng)問(wèn)該網(wǎng)頁(yè)的時(shí)候,可以如下判斷:
if (Request.Cookies["httpCookie"] != null)
{
Session["admin"] = Request.Cookies["httpCookie"].Values["admin"].ToString();
}
if (Session["admin"] == null)
{
this.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('請(qǐng)重新登 錄');location.href='logins.aspx'</script>");
}
下面在來(lái)說(shuō)說(shuō)退出的時(shí)候該怎么做比較好
1、 退出的時(shí)候session和Cookie的值都要清空,現(xiàn)在來(lái)簡(jiǎn)單說(shuō)說(shuō)session的幾個(gè)方法的區(qū)別:
Session.clear():表示將會(huì)話(huà)中所有的session的鍵值都清空,但是session還是依然存在,同等于Session.RemoveAll()
Session[“admin”]=null:表示將制定的鍵的值清空,并釋放掉,和session[“admin”]=””不一樣,它清空了,但是session不釋放,同等于session.Remove(“name”);
Session.Abandon()就是把當(dāng)前Session對(duì)象刪除了,下一次就是新的Session了。
主要的不同之處在于當(dāng)使用Session.Abandon時(shí),會(huì)調(diào)用Session_End方法(InProc模式下)。當(dāng)下一個(gè)請(qǐng)求到來(lái)時(shí)將激發(fā)Session_Start方法。而Session.Clear只是清除Session中的所有數(shù)據(jù)并不會(huì)中止該
Session,因此也不會(huì)調(diào)用那些方法,Abandon方法用于主動(dòng)結(jié)束會(huì)話(huà),若沒(méi)有調(diào)用該方法,當(dāng)會(huì)話(huà)超時(shí)后,也會(huì)自動(dòng)結(jié)束當(dāng)前會(huì)話(huà)。
2、 下面在來(lái)看看如何清除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清除當(dāng)前的值就可以了即Session[“admin']=null就可以了,Cookie按照以上方法清除即可
建議和意見(jiàn):
1、 在退出的時(shí)候我們可以在創(chuàng)建一個(gè)logout的頁(yè)面來(lái)寫(xiě)時(shí)間,這樣比較好一些
2、 無(wú)論在進(jìn)行什么操作的時(shí)候,能用If判斷是否為空的情況下就盡量的判斷,防止出現(xiàn)了空指針異常
以上所述是小編給大家介紹的詳解PHP中cookie和session的區(qū)別及cookie和session用法小結(jié)的相關(guān)知識(shí),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- PHP入門(mén)教程之會(huì)話(huà)控制技巧(cookie與session)
- PHP會(huì)話(huà)控制:Session與Cookie詳解
- PHP5中Cookie與 Session使用詳解
- php中如何同時(shí)使用session和cookie來(lái)保存用戶(hù)登錄信息
- php session和cookie使用說(shuō)明
- php設(shè)置session值和cookies的學(xué)習(xí)示例
- 深入理解PHP中的Session和Cookie
- PHP基于cookie與session統(tǒng)計(jì)網(wǎng)站訪(fǎng)問(wèn)量并輸出顯示的方法
- PHP中cookie和session的區(qū)別實(shí)例分析
- php禁用cookie后session設(shè)置方法分析
- 解析PHP的Yii框架中cookie和session功能的相關(guān)操作
- PHP cookie與session會(huì)話(huà)基本用法實(shí)例分析
相關(guān)文章
Laravel框架實(shí)現(xiàn)簡(jiǎn)單的學(xué)生信息管理平臺(tái)案例【附源碼下載】
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)簡(jiǎn)單的學(xué)生信息管理平臺(tái),結(jié)合具體案例形式較為詳細(xì)的分析了基于Laravel框架的學(xué)生信息管理平臺(tái)路由與控制器相關(guān)操作技巧,并附帶完整源碼供讀者下載參考,需要的朋友可以參考下2019-05-05
Yii框架獲取當(dāng)前controlle和action對(duì)應(yīng)id的方法
這篇文章主要介紹了Yii框架獲取當(dāng)前controlle和action對(duì)應(yīng)id的方法,可實(shí)現(xiàn)獲取當(dāng)前controlle或action對(duì)應(yīng)id的功能,是非常實(shí)用的技巧,需要的朋友可以參考下2014-12-12
yii2 commands模式以及配置crontab定時(shí)任務(wù)的方法
下面小編就為大家?guī)?lái)一篇yii2 commands模式以及配置crontab定時(shí)任務(wù)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
Thinkphp搜索時(shí)首頁(yè)分頁(yè)和搜索頁(yè)保持條件分頁(yè)的方法
這篇文章主要介紹了Thinkphp搜索時(shí)首頁(yè)分頁(yè)和搜索頁(yè)保持條件分頁(yè)的方法,以?xún)煞N不同的方式詳細(xì)分析了實(shí)現(xiàn)搜索時(shí)分頁(yè)情況下保持搜索條件的方法,是非常具有實(shí)用價(jià)值的技巧,需要的朋友可以參考下2014-12-12
Laravel框架使用Seeder實(shí)現(xiàn)自動(dòng)填充數(shù)據(jù)功能
這篇文章主要介紹了Laravel框架使用Seeder實(shí)現(xiàn)自動(dòng)填充數(shù)據(jù)功能,結(jié)合實(shí)例形式分析了Laravel基于Seeder類(lèi)實(shí)現(xiàn)自動(dòng)填充數(shù)據(jù)的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-06-06
thinkphp實(shí)現(xiàn)面包屑導(dǎo)航(當(dāng)前位置)例子分享
今天把博客一些細(xì)節(jié)完善了一下,其中修改了一下欄目頁(yè)和文章頁(yè)中的“當(dāng)前位置”。2014-05-05

