PHP在http 協定的頭資訊裡傳送cookie,因此 setcookie()函數必須在其它資訊被輸出到瀏覽器前調用,這和對header()函數的限制類似。
1.設定cookie:
a .
Php代碼
'something from somewhere'
);
-------------------------------------------------- -------------------------------------------------- -------------
2.讀取cookie:
直接使用php 內建超級變數$_COOKIE 就可以讀取瀏覽器端的cookie。 只要將有效時間設定為小於當前時間,且將有效時間設定為小於目前時間。例如:
Php代碼
ookie
""
, time()-1);setcookiep(3)時有錯誤提示,也可能你的文件是從其他字符集轉 換過來,文件後面可能帶有 BOM 簽章(就是在文件內容中加入一些隱藏的BOM 字元)。解決的辦法就是使你的文件不出現這種情況。還有透過使用ob_start()函數 也能處理一點。
b.$_COOKIE 受magic_quotes_gpc 影響,可能自動轉義
a.伺服器透過隨著回應傳送一個http 的Set-Cookie 頭,在客戶機中設定一個cookie(多個cookie 要多個頭)。
b.並在客戶端自動傳送一個http 的cookie 頭,伺服器接收讀取。
Set-Cookie: TestCookie=something from somewhere; path=/
瀏覽器將在客戶端的磁碟上建立一個cookie,並在內部寫入: from somewhere;
---------------------------------------- ---------分線------------------------------------------------- -----------------------------
PHP 的SESSION
PHP 的SESSION
session最最核心的概念就是:網頁間跳轉的額外數據,保存在伺服器,用一個id標識,瀏覽器要維持session,需要每次提交都帶上這個id.
--------------------------------------------- -------------------------------------------------- -------------------------------
session id的傳遞有兩種方式:
a.
當從該頁跳到的新頁面並呼叫session_start()後,PHP 將檢查與給定ID 相關聯的伺服器端存貯的session 數據,如果沒找到,就新建一個數據集。
b
xxx,也可以透過POST 傳遞 session 值。
------------------------------------------ -------------------------------------------------- ----------------------------------
如果客戶端禁止使用cookie,可以使用如下方法:
a、設定php.ini中的session.use_trans_sid = 1或編譯時開啟開啟了--enable-trans-sid選項,讓PHP自動跨頁傳遞session id。 b、手動透過URL傳值、隱藏表單傳遞session id。 c、以檔案、資料庫等形式保存session_id,在跨頁過程中手動呼叫。
link:http://apps.hi.baidu.com/share/detail/41643457
session也可以在禁用cookiesion. =1,改為0,session會保存在伺服器端,而不是客戶端的cookie。
可以透過session.save_path來查看伺服器的session存放位置
session的使用:
eg:com
刪除session:
-------------------------------------------------- -------------------------------------------------- --
php code:
Php
HTTP/1.1 200 OK Date: Fri, 26 2) SVN/1.2.1 PHP/ 5.0.4 DAV/2 X-Powered-By: PHP/5.0.4
Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/3mfc94ncdr15ujitjogma3; path Cache-Control: no -store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Length: 1 Keep-Alive:ConnectionConnectionout=195, -Alive
Content-Type: text/html; charset=utf-8Content-Language: Off
次請求
次
GET /test.php HTTP/1.1
Accept: */*
Referer: http://localhost/
Accept-Language: zh-cn Accept-Ancom:7):comm/Sdefilla/defillar.com MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)
Host: localhost
): Keep-Alive Cookie:530mfcm>
伺服器第二次回:
HTTP/1.1 200 OK
Date: Fri, 26 Aug 2005 07:44:23 GMT Server: AV/2
X- Powered-By: PHP/5.0.4
Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/
Expires: Thu, 1915ujitjogma3; path=/
Expires: Thu, 1900:Nov 198:0185 cache, must- revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 1
Keep-Alive: timeout=15, max=98
Keep-Alive: timeout=15, max=98
Keep-Alive: timeout=15, max=98
Keep-Alive: timeout=15, max=98
html; charset=utf-8 Content-Language: Off
ﳎ
這個header會向伺服器發送一個cookie訊息,告訴伺服器我有一個cookie,名字叫PHPSESSID,內容是bmmc3mfc94ncdr15ujitjogma3。
這個cookie是怎麼來的呢?看第一次伺服器回傳的訊息裡邊有:
Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/
這是伺服器向客戶端瀏覽器寫一個cookie,名字是PHPSESSID,值是bmmc3mfc94dr15 session_id。
繼續看第二次向伺服器發出的請求,仍然向伺服器發送了PHPSESSID這個cookie
可以得到以下結論:
1、只要使用了session,就會透過cookie的方式向客戶端瀏覽器發送session
2、每次向伺服器發出請求的時候,本地瀏覽器會把cookie附帶在請求資訊中
總結:
只要使用了session,只要使用cookiesion,就會透過cookie的方式向客戶端瀏覽器發送session
實際上session完全是一個抽象的概念,session真正要做的,是在除了http提供的get和post提供的參數之外,針對某個用戶(可能是個瀏覽器,或是台電腦,甚至是個ip),能保存額外的資訊。如果我們不用系統提供的session,完全也可以傳遞數據,例如把我們原本要存入session的數據,序列化後再加密,形成一個字串,在頁面上所有的url和form裡傳遞。伺服器收到頁面請求後,從get或post裡取出機密串,揭開,還原數據,實際上和session要做的東西一個樣。只不過這種方式超級bt,要實現需要做太多額外的工作。
session從技術角度講,就是把在網頁連結之間,額外要儲存的數據,用一個id命名,保存在伺服器端,而瀏覽器只需要每次get或post的適合,只提供這個id,就能獲得之前儲存的資料。 php預設是用檔案來保存資料的。 unix下,php通常會在/tmp下面,建立 "sess_"+$session_id 這樣的檔名,透過這個名字,就能直接找到session_id對應的資料。 所以session最最核心的概念就是:網頁間跳轉的額外數據,保存在伺服器,用一個id標識,瀏覽器要維持session,需要每次提交都帶上這個id。
怎麼能讓瀏覽器每次請求都能帶上這個id呢,笨辦法當然是在每個url連結或form的post裡都加個id的參數,有些webmail其實就是這麼做的。當然更簡單的辦法就是透過cookie來儲存。但cookie方案還有個問題,如果瀏覽器不支援cookie怎麼辦,上面也有陳述.
上述的session,是php4,5提供的session功能,要知道php4之前系統都沒有提供session功能!而且很多cgi程序,都是完全自己實現的session。 php(4,5)提供的session,系統預設會用cookie來保存session_id
我之前一個項目,使用者都在內網使用web。為了方便管理,直接把瀏覽器ip綁死到一個session,就是用瀏覽器ip位址取代了sessionid。這個方案裡沒有cookie,但還算是session,應為他沒脫出session的定義。
每次向伺服器發出請求的時候,本地瀏覽器會把cookie附帶在請求訊息中
實際上和session完全沒有關係,說的只是http協議裡cookie的工作方式。這個cookie是session_start()函數寫的,我們也完全可以自己任意寫cookie,只要寫了,而且沒超過有效期,瀏覽器都能送。
以上就介紹了PHP版本--HTTP session cookie原理及應用,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。