1. 程式人生 > >PHP Cookie與Session的使用與區別

PHP Cookie與Session的使用與區別

Cookie與Session Cookie和session是目前使用的兩種儲存機制。 cookie是從一個WEB頁到下一個WEB頁面的資料傳送方法,cookie儲存在客戶端。 Session是讓資料在頁面中持續有效的一個傳遞方法,session儲存在伺服器端。 掌握了cookie與session這兩個技術,在WEB網站頁面間資訊傳遞的安全性是非常必要的,也是必不可少的。 一、        Cookie管理 1、            Cookie Cookie是一種在遠端瀏覽器端儲存資料並以此跟蹤和識別使用者的機制。簡單的說,cookie是WEB伺服器暫時儲存在使用者硬碟上的一個文字檔案,並隨後被WEB瀏覽器讀取。當用戶在次訪問WEB網站時,網站通過讀取cookie檔案記錄這位訪客的特定資訊(如上次訪問的位置、花費的時間、使用者名稱和密碼等)從而迅速做出響應,如在頁面中不需要輸入使用者名稱和密碼等,就可以直接登入網站等。文字檔案的命令格式如下: 使用者名稱@網站地址[數字].txt 開啟”我的電腦”—C盤(系統盤)---documentsand settings—administrator—cookie 這個路徑就是cookie檔案儲存的路徑。Administrator是當前使用的使用者名稱,也就是登入本機的使用者名稱,
[email protected]
[1].txt是指定格式自動生成的cookie檔案,index.dat是用來保儲所有開啟的WEB網站的資訊,該檔案會隨著使用者開啟的網站隨時進行更新,在cookie資料夾下的每一個cookie檔案都是一個簡單而又普通的文字檔案,而不是程式。Cookie中的內容大多是經過了加密處理的,因此表面看起來只是一些字母和數字的組合,這些內容只有伺服器才知道他們真正的含義。 Cookie常用於以下3個方面:        記錄訪客的某些資訊。如可以利用cookie記錄使用者訪問網頁的次數,或者記錄訪客曾經輸入過的資訊,另外,某些網站可以應用cookie自動記錄訪客上次登入的使用者名稱。        在頁面之間傳遞變數。瀏覽器並不會儲存當前頁面上任何變數資訊的,當頁面被關閉,頁面上的任何變數資訊將隨之消失。如果使用者宣告一個變數id=8,要把這個變數傳遞到另一個頁面,可以把變數id以cookie形式儲存下來,然後在下一頁通過讀取該cookie來獲取變數的值。        將所檢視的internet頁礁在cookie臨時資料夾中,這樣可以提高以後瀏覽的速度。 2、            建立Cookie
在PHP中通過setcookie函式建立Cookie。在建立之前必須瞭解的是,cookie是HTTP頭標的組成部分,而頭標必須在頁面其他內容之前傳送,它必須最先輸出,即使在setcookie()函式前輸出一個HTML標記或echo語句,甚至一個空行都會導致程式出錯。語法如下: Bool setcookie(string name[,string value[,int expire [,stringpath [,string domain [,int secure]]]]]) 該函式的引數說明如表:     Name  cookie的變數名  可以通過$_cookie[“cookiename”]呼叫變數名cookiename的cookie     Value  cookie的變理名  該值儲存在客戶端不能用來儲存敏感資料。可以通過$_cookie[“value”]獲取名為values的值     Expire  cookie的失效時間,expire是標準的UNIX時間標記,可以用time()函式或mktime()函式獲取,單位為秒。     Path    cookie在伺服器端的有效路徑  如果該引數設定為“/”,則它就在整個domain下的/11目錄及子目錄內有效。預設是當前目錄。     Domain  cookie有效的域名  如果要使cookie在mrbccd.com域名下的所有子域都有效,應該設定為mrbccd.com     Secure 指明cookie是否通過僅通過安全的https,值為0或1,如果值為1,則cookie只能在HTTPS連線上有效,如果值為預設值0,則cookie在HTTP和HTTPS連線上均有效。 例:
<?php setcookie("TMCcookie","www.baidu.com"); setcookie("TMCcookie","www.baidu.com",time()+60);   //設定cookie有效時間為60秒 setcookie("TMCcookie",$value,time()+3600,"/cs/","baidu.com",1); ?> 3、            讀取Cookie 在PHP中可以直接通過超級全域性資料$_cookie[]來讀取瀏覽器端的cookie值。 例:   <?php if(!isset($_COOKIE["visittime"])){    //檢測cookie檔案是否存在,如果不存在,往下執行 setcookie("visittime",date("y-m-d H:i:s"));   //設定一個cookie變數 echo "歡迎第一次訪問網站。";    }else{ setcookie("visittime",date("y-m-dH:i:s"),time()+60);   //如果存在,設定上帶cookie失效時間的變數。 echo "您上一次訪問的時間為:".$_COOKIE["visittime"];       echo "<br>"; } echo "您本次訪問網站的時間為:".date("y-m-dH:i:s"); ?> 過60秒後我們重新整理,則顯示的是第一次訪問的時間。     如果未設定cookie的到期時間,則在關閉瀏覽器時自動刪除cookie資料。如果為cookie設定了到期時間,瀏覽器將會記住cookie資料,即使使用者重新啟動計算機,只要沒有到期,再訪問網站時也會獲得資料資訊。 4、            刪除Cookie 當cookie被建立後,如果沒有設定它的失效時間,其cookie檔案會在關閉瀏覽器時被自動刪除。如果想在關閉瀏覽器之前刪除cookie檔案,方法有兩種:一種是使用setcookie()函式刪除,另一種是使用瀏覽器手動刪除cookie。         (1)、使用setcookie()函式刪除cookie 刪除cookie和建立cookie的方式基本類似,刪除cookie也使用setcookie()函式。刪除cookie只需要將setcookie()函式中第二個引數設定為空值,將第三個引數cookie的過期時間設定為小於系統的當前時間即可。 例如:將cookie的過期時間設定為當前時間減1秒,程式碼如下:             setcookie("name","",time()-1); time()函式返回以秒錶示的當前時間戳,把過期時間減1秒就會得到過去的時間,從而刪除cookie.    注意:把過期時間設定為0,可以直接刪除cookie.         (2)、使用瀏覽器手動刪除cookie 在使用cookie時,cookie自動生成一個文字檔案儲存在IE瀏覽器的cookies臨時資料夾中。使用瀏覽器刪除cookie檔案是非常便捷的方法。 開啟一個頁面-----工具-----internet選項,在“常規”選項卡------刪除cookie按鈕,彈出“刪除temporaryinternet files資料夾中的所有cookies嗎?”-----單擊“確定”,即可成功刪除全部cookie檔案。 5、            Cookie的生命週期 如果cookie不設定時間,就表示它的生命週期為瀏覽器會話的期間,只要關閉IE瀏覽器,cookie就會自動消失。這種cookie被稱為會話cookie,一般不儲存在硬碟上,而是儲存在記憶體中。     如果設定了過期時間,那麼瀏覽器會把cookie儲存到硬碟中,再次開啟IE瀏覽器時會被依然有效,直到它的有效期超時。 雖然cookie可以長期儲存在客戶端瀏覽器中,但也不是一成不變的。因為瀏覽器允許最多儲存300個cookie檔案,而且每個cookie檔案支援最大容量為4KB,每個域名最多支援20個cookie,如果達到限制,瀏覽器會自動地隨機刪除cookies. 6、            Cookie的綜合應用 在進行網站開發時,都需要製作一個計數器來記錄網站的訪問量,以此來吸引更多的訪客關注網站。 例:   <?php if(!empty($_COOKIE["counter"])){ $counter=$_COOKIE["counter"]+1; } else{ $counter=1; } setcookie("counter",$counter,time()+2678400); echo "您是第".$counter."位訪客。"; ?> 關閉瀏覽器時也不會停止記數,除非C:\Documents and Settings\Administrator\LocalSettings\Temporary Internet Files將檔案進行刪除才可以。 計數器的實現方法有多種。 二、        Session管理 對比cookie,會話檔案中儲存的資料是在PHP指令碼中以變數的形式建立的,建立的會話變數在生命週期(20分鐘)中可以被跨頁的請求所引用。另外,session是儲存在伺服器端的會話,相對安全,並且不像cookie那樣有儲存長度的限制。 1、            瞭解session Session被譯成中文為“會話”,其本義是指有始有終的一系列動作/訊息,如打電話。 在計算機專業術語中,session是指一個終端使用者與互動系統進行通訊的時間間隔,通常指從註冊進入系統到登出退出系統之間所經過的時間。因此,session實現上是一個特定的時間概念。 2、            Session的功能 Session在WEB技術中佔有非常重要的份量。由於網頁是一種無狀態的連線程式。因此無法得知使用者的瀏覽狀態。因此必須通過session記錄使用者的有關資訊,以供使用者再次以此身份對WEB伺服器提供要求時作確認。例,在電子商務網站中,通過session記錄使用者登入的資訊,以及使用者所購買的商品,如果沒有session,那麼使用者就會每進入一個頁面都登入一遍使用者名稱和密碼。 另外,session會話適用於儲存使用者的資訊量比較小的情況。如果使用者需要儲存的資訊量相對較少,並用對儲存內容不需要長期儲存,那麼使用session把資訊儲存到伺服器端比較適合。 3、            建立會話 建立一個會話需要通過以下幾個步驟實現: 啟動會話--------註冊會話-------使用會話-------刪除會話 1)       啟動會話 啟動會話的方式有兩種:一種是使用session_start()函式,另一種使用session_register()函式為會話登入一個變數來隱含地啟動會話。 通常,session_start()函式在頁面開始位置呼叫,然後會話變數被登入到資料$_session。 其語法格式為:       Bool session_start(void); 使用session_start()函式之前瀏覽器不能有任何輸出,否則會產生類似以下的錯誤提示。     如果想使用session_satrt()這個全域性變數來儲存你的資料的話得在php.ini檔案中配置你的資訊:        session.save_path = "D:/program files/php/temp" 例:     <?php echo "呵呵……"; session_start(); ?> 執行結果如下: 呵呵……
Warning: session_start()[function.session-start]:Cannot send session cache limiter - headers already sent (output started atC:\webserver\wwwroot\11.php:1) in C:\webserver\wwwroot\11.php on line 3 <?php session_start(); ?> 注意:該程式碼前不要有任何的程式碼,如果新建的檔案預設有的內容,要刪除。 Session_register()函式用來為會話登入一個變數來隱含地啟動會話,但要求設定php.ini檔案的選項,將register_globals指令設定為ON,然後重新啟動apache伺服器。      使用session_register()函式時,不需要呼叫session_start()函式,PHP會在註冊變數之後隱含地呼叫session_start()函式。 2)       註冊會話 會話變數被啟動後,全部儲存在陣列$_session中。通過陣列$_session建立一個會話變數很容易,只要直接給該陣列新增一個元素即可。 例: <?php session_start(); $_SESSION["admin"]=null; ?> 3)       使用會話 首先需要判斷會話變數是否有一個會話ID存在,如果不存在,就建立一個,並且使用其能夠通過全域性陣列$_SESSION進行訪問。如果已經存在,則將這個已註冊的會話變數載入以供使用者使用。 例:    <?php session_start(); $_SESSION["admin"]=id; if(!empty($_SESSION["admin"])){   $myvalue=$_SESSION["admin"];    echo $myvalue; }else{ echo "該會話不存在。"; } ?> 4)       刪除會話 刪除會話的方法主要有刪除單個會話、刪除多個會話和結束當前會話的3種。 a)       刪除單個會話 刪除會話變數,同陣列的操作一樣,直接登出$_SESSION陣列的某個元素即可。 例如:登出$_SESSION[“admin”]變數,可以使用unset()函式,程式碼如下:     unset($_SESSION["admin"]); b)       刪除多個會話 如果想要一次登出所有的會話變數,可以將一個空的陣列賦值給$_SESSION,程式碼如下:       $_SESSION=array(); c)        結束當前的會話 如果整個會話已經結束,首先應該登出所有的會話變數,然後使用session_destroy()函式清除結束當前的會話,並清空會話中的所有資源,徹底銷燬session,程式碼如下:     session_destroy(); 4、            Session的綜合應用----通過session判斷使用者的操作許可權 大多數網站的開發過程中,需要對管理員和普通使用者對操作網站的許可權進行劃分。 例:13.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=gb2312" /> <title>用session判斷使用者操作許可權</title> <script type="text/javascript"language="javascript"> function check(){   if(form1.user.value==""){     alert("請輸入使用者名稱,謝謝!");        form1.user.focus();        return false; } if(form1.pwd.value==""){    alert("請輸入密碼,謝謝!");    form1.pwd.focus();    return false; } form1.submit(); } </script> </head> <body> <form name="form1" method="post"action="check_13.php"> 使用者名稱:<input type="text"name="user" size="20" /><br /><br /> 密&nbsp;&nbsp;碼:<inputtype="password" name="pwd" size="21" /><br/><br /> <input type="submit" name="submit"value="提交" onclick="check()"/> <input type="reset" name="reset"value="重置" /> </form> </body> </html> check_13.php <?php session_start(); $_SESSION[user]=$_POST[user]; $_SESSION[pwd]=$_POST[pwd]; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type"content="text/html; charset=gb2312" /> <title>check_13.php</title> </head> <body> <?php if($_SESSION[user]==""){ echo"<script> alert('請選擇正確的登入途徑!');history.back();</script>"; } if($_SESSION[user]=="123" &&$_SESSION[pwd]=="123"){    echo "您是管理員使用者<br>";    echo "<ahref='admin.php'>請進入管理員使用者管理頁面。</a>"; }else{   echo "您是普通使用者";   echo "<ahref='user.php'>請進入普通使用者管理頁面。</a>"; } ?> <?php session_start(); unset($_SESSION[user]); unset($_SESSION[pwd]); session_destroy(); ?> </body> </html> 三、        Cookie與Session的比較 它們最大的區別是Session是將Session的資訊儲存在伺服器上,並通過一個Sessionid來傳遞客戶的資訊,同時伺服器接收到Sessionid後,根據這個ID來提供相關的Session資源;cookie是將所有的資訊以文字檔案的形式儲存在客戶端,並由瀏覽器進行管理和維護。 由於session為伺服器儲存,所以遠端使用者無法修改session檔案的內容。而cookie為客戶端儲存,所以session要比cookie安全得多。當然使用session還有很多優點,如控制容易,可以按照使用者自定義儲存(儲存於資料庫)。

相關推薦

phpcookiesession區別簡易用法

php cookie session 一、區別1、Cookie是完全保存在客戶端。當客戶端禁止cookie時將不能再使用;對服務端壓力較小;可以指定生存周期;安全性差。2、Session是存放在服務端的。但session id是存放在客戶端的cookie中的,但php的session存放方法是多樣

cookiesession區別

分析 單個 session strong 使用 占用 安全性 服務器性能 存在 Cookie與session的區別;     01,Cookie的數據存放在客戶的瀏覽器上;session的數據存放在服務器上     02,Cookie不是很安全,別人可以分析存放在本地的co

簡述COOKIESESSION區別聯絡?

cookie 和session 的區別:1、cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,考慮到安全應當使用session。3、session會在一定時間內儲存在伺服器上。當訪問增多,會比較佔用你伺

CookieSession區別cookie被禁用,session是否還可以被使用?

什麼是Cookie,什麼是cookie會話機制?cookie與session的區別(這裡寫自定義目錄標題) cookie的內容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成cookie的作用範圍。 若不設定過期時間,則表示這個cookie的生命期為瀏覽器會話期間,關閉瀏

cookiesession區別聯絡

為什麼會有Cookie和Session的出現: TCP是無狀態的,當我們在訪問瀏覽器時,伺服器不會為客戶端儲存它上一次訪問的內容,每一次訪問都是獨立的。為了方便使用者的訪問,所以就出現了這兩個機制,使

【計算機網路】CookieSession區別

                                    Cookie與Session的區別 Cookie與Session是網路上儲存資料的兩種機制,理解這兩種方式的區別對我們提高網站執行的效率十分重要。 網站利用這兩種技術,來知道我們的登入保持狀態。比如說

淺談cookiesession區別

cookie才用的是在客戶端保持狀態的方案(它是在使用者端的會話狀態的存貯機制),前端也可以來設定他 所有瀏覽器都識別,並且會快取在瀏覽器中。 cookie是以key=value這種鍵值對的形式儲存,每個cookie之間一般用“;”分隔,大小一般不超過4KB 下面來說下cookie與session的區別

CookieSession區別

Cookie與Session的區別? 1.Cookie 與Session 都是會話技術,Cookie是執行在客戶端,Session執行在服務端。 2.Cookie有大小限制,以及瀏覽器在存Cookie的個數也有限制,Session是沒有大小限制和伺服器的記憶體大小有關。 3.Cookie有安全隱患,通過

Cookiesession區別及其常見面試問題

一、Cookie技術Cookie技術是將使用者的資料儲存到客戶端的技術,我們分為兩方面學習:第一,伺服器端怎樣將一個Cookie傳送到客戶端第二,伺服器端怎樣接受客戶端攜帶的Cookie1.伺服器端向客戶端傳送一個Cookie   1)建立Cookie:         Co

JSESSIONID、cookieSESSION區別和聯絡 同名JSESSIONID處理

在一些投票之類的場合,我們往往因為公平的原則要求每人只能投一票,在一些WEB開發中也有類似的情況,這時候我們通常會使用COOKIE來實現,例如如下的程式碼: < % cookie[]cookies = request.getCookies(); if (cookies

CookieSession區別聯絡及生命週期

       前幾天面試問了一個問題,當時記不太清了,上網查了下發現這個問題還真的很有講究而且很重要,自己總結下做下記錄。 一、Session與Cookie介紹 這些都是基礎知識,不過有必要做深入瞭解。先簡單介紹一下。 二者的定義: 當你在瀏覽網站的時候,WEB

cookiesession區別關系

就是 瀏覽器中 存儲 val 字典 set sessionid 服務 不同 cookie與session的區別 1. 存儲位置不同   cookie存儲在瀏覽器中   session存儲在服務端裏 2. 大小不同   cookie最大4K   session由於

cookiessession區別

作用 enables 自動 購物 一段 通知 use 登錄 sessions HTTP協議是無狀態的協議,所以服務端需要記錄用戶的狀態時,就需要用某種機制來識具體的用戶,這個機制就是Session。 當程序需要為某個客戶端的請求創建一個session的時候,服

cookiesession使用者認證元件

1.cookie def login(request): if request.method == "GET": return render(request,"login.html") else: user = request.POST.get("use

PHPcookiesession區別

1、cookie只能儲存字串,session不僅僅是字串,還可以是物件,布林值等等基本資料型別 2、cookie是儲存在客戶端的,session是儲存在伺服器端的 3、生命週期不同,同一個cookie檔案可以有多個鍵值對並且設定不同的過期時間,而session是統一的時間控制Sessio

Token Session 相關區別

1. 為什麼要有session的出現? 答:是由於網路中http協議造成的,因為http本身是無狀態協議,這樣,無法確定你的本次請求和上次請求是不是你傳送的。如果要進行類似論壇登陸相關的操作,就實現不了了。 2. session生成方式? 答:瀏覽器第一次訪問伺服器,伺服器

快取(cachesession區別

快取主要是為了提高資料的讀取速度。因為伺服器和應用客戶端之間存在著流量的瓶頸,所以讀取大容量資料時,使用快取來直接為客戶端服務,可以減少客戶端與伺服器端的資料互動,從而大大提高程式的效能。 本章從快取所在的名稱空間“System.Web.Caching”開始,詳細介紹框架提

【WEB前端】COOKIESSESSION區別

寫在前面的    對WEB前端的知識回顧的當中,覺得COOKIES和SEESION的應用層面有些相似,但是具體怎樣卻不是很清楚,下面就來總結一下這兩個東西的共同點和區別,幫助自己能夠更好的掌握這些基礎

cookiesession區別詳解

重復 處理方式 一行 所有 有效 依據 是把 存儲 一個 二者的定義: 當你在瀏覽網站的時候,WEB 服務器會先送一小小資料放在你的計算機上,Cookie 會幫你在網站上所打的文字或是一些選擇, 都紀錄下來。當下次你再光臨同一個網站,WEB 服務器會先看看有沒有它上次留下的

cookiesession區別

開發人員 一個 客戶端 匹配 也會 自己 ssi 成了 本地 幾乎每個web開發人員都會問Cookie和Session有什麽聯系和區別 拋出問題: 1.首先服務器是無記性的,不知道那個客戶端上過自己的網站; 2.如果不手動添加記憶功能,那麽每次訪問都需要登錄,豈不是很麻煩?