程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP中session 與cookie的原理和關系1

PHP中session 與cookie的原理和關系1

編輯:關於PHP編程

有過購物經驗的朋友都知道,在購買商品時網站會記錄你挑選的商品到購物車,這些就是用session 和cookie技術實現,當然不同的web平台技術實現細節略有不同,但幾乎都會用到session 和cookie。

為什麼要用到session和cookie呢,這就有必要說一下http協議了,HTTP協議是無狀態的,通俗一點說就是這一秒不知道上一秒發生了什麼事情,

 

如果需要跟蹤某個用戶在站點的狀態,顯然這是行不通的,下面說說COOKIE技術

Cookie:可以用來在多個頁面共享一些信息,cookie是被HTTP協議支持的,浏覽器在向服務器請求一個頁面時,服務器返回HTTP報文+數據,浏覽器會解析從服務器接收的HTTP報文,從而做相應的操作。

服務器報文:

HTTP/1.1 200 OK
Date: Thu, 06 Dec 2012 17:05:01 GMT
Server: Apache/2.2.17 (Win32) PHP/5.3.5
X-Powered-By: PHP/5.3.5
Set-Cookie: mycookie=Hello%2CCookie; expires=Thu, 06-Dec-2012 18:05:01 GMT; path=/
Content-Length: 44
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

這是我們只關注Set-Cookie: mycookie=Hello%2CCookie; expires=Thu, 06-Dec-2012 18:05:01 GMT; path=/
這是告訴浏覽器要保存的cookie信息,通俗一點說就是:“浏覽器請把這段cookie信息保存下來”

格式為 鍵-值對的形式如一個cookie鍵為:publicinfo  值為:hello,cookie  形式為:publicinfo=hello,cookie

浏覽器請求報文:

GET /cookie/cookie1.php HTTP/1.1
Accept: */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; InfoPath.2)
Accept-Encoding: gzip, deflate
Host: localhost
Connection: Keep-Alive
Cookie: C4vN_2132_saltkey=MW4qwm12; C4vN_2132_lastvisit=1354808405; C4vN_2132_sid=Dl9pU9; C4vN_2132_lastact=1354812024%09search.php%09forum; C4vN_2132_forum_lastvisit=D_36_1354812013; C4vN_2132_visitedfid=36; PHPSESSID=ggcr13idghctd9mi4gqllvcvs5; zhangqiang1=Hello%2CCookie

 這裡浏覽器將客戶端的cookie信息發送到服務器,這樣在請求-響應之間就能夠保持一些狀態信息了。

在PHP中cookie的使用

在PHP中使用cookie有兩種方法,

1.使用系統函數setcookie設置

2.使用header函數構架cookie報文

有了前面的知識就知道這兩個函數其實所做的事情結果都一樣,最終要將cookie信息寫到HTTP報文中去

方法1:

setcookie(cookie鍵的名稱,值,過期時間,訪問目錄)

<?php
 setcookie("mycookie","Hello,Cookie",time()+3600,"/");
 echo "<a href='/cookie/cookie2.php'>查看Cookie</a>";
?>
方法2:(這裡直接將要設置的cookie寫到HTTP報文中去了)

header("Set-Cookie: mycookie=123; expires=Tue, 04-Dec-2012 15:58:18 GMT");
echo "<a href='/cookie/cookie2.php'>查看Cookie</a>";
在服務器端訪問cookie:

<?php
 echo $_COOKIE["mycookie"];
?>
訪問cookie很簡單用超全局數組$_COOKIE就用可以了,[]中填寫cookie的鍵。

使用cookie的原理就知道一些購物網站或者登錄功能如何實現了,但cookie也是有不足的地方

    安全性:cookie是存放在客戶端的,也就是可以篡改的,不能夠將一些重要的數據存放在cookie裡,如用戶名和密碼等

網絡傳輸:cookie必須包含在HTTP請求和響應報文中,所以不能存放太多的數據。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved