淺析關(guān)于cookie和session_PHP教程
推薦:PHP5中的this,self和parent關(guān)鍵字詳解PHP5是一具備了大部分面向?qū)ο笳Z言的特性的語言,比PHP4有了很多的面向?qū)ο蟮奶匦?但是有部分概念也比較繞人,所以今天拿出來說說,說的不好,請高手見諒. (閱讀本文,需要了解PHP5的面向?qū)ο?/p>
1. PHP的COOKIE
cookie 是一種在遠(yuǎn)程瀏覽器端儲(chǔ)存數(shù)據(jù)并以此來跟蹤和識(shí)別用戶的機(jī)制。
PHP在http協(xié)議的頭信息里發(fā)送cookie, 因此 setcookie() 函數(shù)必須在其它信息被輸出到瀏覽器前調(diào)用,這和對 header() 函數(shù)的限制類似。
1.1 設(shè)置cookie:
可以用 setcookie() 或 setrawcookie() 函數(shù)來設(shè)置 cookie。也可以通過向客戶端直接發(fā)送http頭來設(shè)置.
1.1.1 使用setcookie()函數(shù)設(shè)置cookie:
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool httponly]]]]]] )
name: cookie變量名
value: cookie變量的值
expire: 有效期結(jié)束的時(shí)間,
path: 有效目錄,
domain: 有效域名,頂級域唯一
secure: 如果值為1,則cookie只能在https連接上有效,如果為默認(rèn)值0,則http和https都可以.
例子:
| 以下為引用的內(nèi)容:
<?php setcookie("TestCookie", value); /* 簡單cookie設(shè)置 */ |
設(shè)置多個(gè)cookie變量: setcookie('var[a]','value');用數(shù)組來表示變量,但他的下標(biāo)不用引號.這樣就可以用_COOKIE[‘var’][‘a’]來讀取該COOKIE變量.
1.1.2. 使用header()設(shè)置cookie;
header("Set-Cookie: name=value[;path=path[;domain=xxx.com[;...]]");
后面的參數(shù)和上面列出setcookie函數(shù)的參數(shù)一樣.
比如:
|
以下為引用的內(nèi)容: value = 'something from somewhere'; |
1.2 Cookie的讀取:
直接用php內(nèi)置超級全局變量 _COOKIE就可以讀取瀏覽器端的cookie.
上面例子中設(shè)置了cookie"TestCookie",現(xiàn)在我們來讀取:
print _COOKIE['TestCookie'];
COOKIE是不是被輸出了?!
1.3 刪除cookie
只需把有效時(shí)間設(shè)為小于當(dāng)前時(shí)間, 和把值設(shè)置為空.例如:
setcookie("name","",time()-1);
用header()類似.
1.4 常見問題解決:
1) 用setcookie()時(shí)有錯(cuò)誤提示,可能是因?yàn)檎{(diào)用setcookie()前面有輸出或空格.也可能你的文檔使從其他字符集轉(zhuǎn)換過來,文檔后面可能帶有BOM簽名(就是在文件內(nèi)容添加一些隱藏的BOM字符).解決的辦法就是使你的文檔不出現(xiàn)這種情況.還有通過使用ob_start()函數(shù)有也能處理一點(diǎn).
2) _COOKIE受magic_quotes_gpc影響,可能自動(dòng)轉(zhuǎn)義
3) 使用的時(shí)候,有必要測試用戶是否支持cookie
<!--[if !supportLineBreakNewLine]-->
1.5 cookie工作機(jī)理:
有些學(xué)習(xí)者比較沖動(dòng),沒心思把原理研究,所以我把它放后面.
a) 服務(wù)器通過隨著響應(yīng)發(fā)送一個(gè)http的Set-Cookie頭,在客戶機(jī)中設(shè)置一個(gè)cookie(多個(gè)cookie要多個(gè)頭).
b) 客戶端自動(dòng)向服務(wù)器端發(fā)送一個(gè)http的cookie頭,服務(wù)器接收讀取.
| 以下為引用的內(nèi)容:
HTTP/1.x 200 OK |
這一行實(shí)現(xiàn)了cookie功能,收到這行后
Set-Cookie: TestCookie=something from somewhere; path=/
瀏覽器將在客戶端的磁盤上創(chuàng)建一個(gè)cookie文件,并在里面寫入:
| 以下為引用的內(nèi)容:
TestCookie=something from somewhere; |
這一行就是我們用setcookie('TestCookie','something from somewhere','/');的結(jié)果.也就是用header('Set-Cookie: TestCookie=something from somewhere; path=/');的結(jié)果.
2. PHP的Session
session使用過期時(shí)間設(shè)為0的cookie,并且將一個(gè)稱為session ID的唯一標(biāo)識(shí)符(一長串字符串),在服務(wù)器端同步生成一些session文件(可以自己定義session的保存類型),與用戶機(jī)關(guān)聯(lián)起來.web應(yīng)用程序存貯與這些session相關(guān)的數(shù)據(jù),并且讓數(shù)據(jù)隨著用戶在頁面之間傳遞.
訪問網(wǎng)站的來客會(huì)被分配一個(gè)唯一的標(biāo)識(shí)符,即所謂的會(huì)話 ID。它要么存放在客戶端的 cookie,要么經(jīng)由 URL 傳遞。
會(huì)話支持允許用戶注冊任意數(shù)目的變量并保留給各個(gè)請求使用。當(dāng)來客訪問網(wǎng)站時(shí),PHP 會(huì)自動(dòng)(如果 session.auto_start 被設(shè)為 1)或在用戶請求時(shí)(由 session_start() 明確調(diào)用或 session_register() 暗中調(diào)用)檢查請求中是否發(fā)送了特定的會(huì)話 ID。如果是,則之前保存的環(huán)境就被重建。
2.1 sessionID的傳送
分享:解析PHP安全編程的加密功能預(yù)備知識(shí) 在詳細(xì)介紹PHP的安全功能之前,我們需要花 點(diǎn)時(shí)間來向沒有接觸過這方面內(nèi)容的讀者介紹一些有關(guān)密碼學(xué)的基本知識(shí),如果對密碼學(xué)的基本概念已經(jīng)非常熟悉,就可以跳過去這一部分
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問控制的和運(yùn)算符優(yōu)先級介紹
- 關(guān)于PHP語言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國語言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- 解析php中的escape函數(shù)
- 深入分析php之面向?qū)ο?/a>
- PHP教程:PHP編碼書寫規(guī)范
- 詳解PHP的Jmai組件及發(fā)送郵件實(shí)例
- PHP獲取文件名后綴(三種經(jīng)典方案)
- PHP技巧:使用APC緩存優(yōu)化PHP程序
- PHP實(shí)例:用PHP實(shí)現(xiàn)表單驗(yàn)證碼登陸校驗(yàn)
- PHP調(diào)用MsSQL Server 2012存儲(chǔ)過程獲取多結(jié)果集(包含output參數(shù))的詳解
- 解析PHP連接遠(yuǎn)程MYSQL和MYSQL5.1中文亂碼處理方法
- 用PHP實(shí)現(xiàn)瀏覽器點(diǎn)擊下載TXT文檔的方法詳解
- 相關(guān)鏈接:
- 教程說明:
PHP教程-淺析關(guān)于cookie和session
。