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

php會話控制cookie與Session會話處理

編輯:關於PHP編程

在php中cookie與session通常用於注冊登錄與記錄用戶信息了,但是cookie與Session兩個有很大的區別,下面我們一起來看看。

會話簡介:HTTP(超文本傳輸協議)定義了通過萬維網(WWW)傳輸文本、圖形、視頻和所有
其他數據所有的規則。HTTP 是一種無狀態的協議,說明每次請求的處理都與之前或之後的
請求無關。雖然這種簡化實現對於HTTP 的普及做出了卓越的貢獻,但對於希望創建復雜的
Web 應用程序的開發人員來說,這點有點困擾。為了解決這個問題,出現了一種在客戶端
機器上存儲少量信息(cookie)。
由於cookie 大小限制、數量及其他原因,開發人員又提出了一種解決方案:session 會
話處理。
一.Cookie
的應用
設置cookie:setcookie()函數可以在客戶端生成一個cookie 文件,這個文件可以保存到
期時間、名稱、值等。
創建cookie

 代碼如下 復制代碼 <?php
setcookie(‘name’,'Lee’,time()+(7*24*60*60));//設置一個過期時間為7天的cookie
?>

參數1:cookie 名稱
參數2:cookie 值
參數3:cookie 過期時間

查看cookie

打開火狐浏覽器:工具–頁面信息-安全-查看cookie,可以查看到當前的cookie信息
讀取cookie

 代碼如下 復制代碼 <?php
echo $_COOKIE['name'];
?>

刪除cookie

 代碼如下 復制代碼 <?php
setcookie(‘name’,”);
setcookie(‘name’,'Lee’,time()-1);
?>

使用Cookie 的限制
1、必須在HTML 文件的內容輸出之前設置;
2、不同的浏覽器對Cookie 的處理不一致,且有時會出現錯誤的結果。
3、限制是在客戶端的。一個浏覽器能創建的Cookie 數量最多為30 個,並且每個不能
超過4KB,每個WEB 站點能設置的Cookie 總數不能超過20 個。

二.Session
會話處理
在使用session 會話處理,必須開始session,使用session_start()開始會話。
創建session 並讀取session

 代碼如下 復制代碼 <?php
session_start();
$_SESSION['name'] = ‘Lee’;
echo $_SESSION['name'];
?>

判斷session 是否存在

 代碼如下 復制代碼 <?php
session_start();
$_SESSION['name'] = ‘Lee’;
if (isset($_SESSION['name'])) {
echo $_SESSION['name'];
}
?>

刪除session

 代碼如下 復制代碼 <?php
session_start();
$_SESSION['name'] = ‘Lee’;
unset($_SESSION['name']);
echo $_SESSION['name'];
?>

銷毀所有session

 代碼如下 復制代碼 <?php
session_start();
$_SESSION['name'] = ‘Lee’;
$_SESSION['name2'] = ‘Lee’;
session_destroy();
echo $_SESSION['name'];
echo $_SESSION['name2'];
?>


cookie與session的區別和關系
•存儲位置:
1.session存儲在服務器位置上,可以通過php.ini裡面配置session相關配置
2.cookie存儲在客戶端上的上(其實可以分兩種:
1,持久性cookie,設置了cookie的時間,以文件方式存在硬盤上,

2,會話cookie,沒有設置cookie時間,cookie的生命周期也就是關閉浏覽器前就消失,一般不會保存在硬盤,而是保存在內存上)

cookie和session的關系

QQ截圖20111115185617

cookie通過http報頭發送:

Cookie  name=PHP%BB%B4%B1%B1; PHPSESSID=cpt2ah3pi4cu7lo69nfbfllbo7

其中PHPSESSID就是關聯服務器session的重要參數

再看session文件:sess_cpt2ah3pi4cu7lo69nfbfllbo7

session_id的生成格式就是:sess_加上一串PHPSESSID的值

我們可以這樣理解:

當程序需要為某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求裡是否已包含了一個session標識 (稱為session id),如果已包含則說明以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來 使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session並且生成一個與此session相 關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應 中返回給客戶端保存。保存這個session id的方式可以采用cookie,這樣在交互過程中浏覽器可以自動的按照規則把這個標識發送給 服務器。一般這個cookie的名字都是類似於SEEESIONID

php.ini裡面關於session和cookie有關的配置


1,session.use_cookie = 1
是否采用Cookie方法傳遞session id值。默認是1,表示啟用。
2,session.name = PHPSESSID
不管是Cookie傳遞sessioin_id,還是GET方法傳遞session_id,都需要使用鍵值。他們的格式分別是Cookie:  sess_name=session_id;和/path.php?sess_name=session_id,其中sess_name就是由這裡指定的。
3,session.use_only_cookies = 0
表示只使用Cookie 的方法傳遞session id。我們說過,傳遞cookie的方法,除了cookie,還有GET方法,GET方法是不安全的方法。在用戶端禁用了cookie的時候,會采用GET方法傳遞session_id,可以通過這個設置盡用GET方法傳遞session_id。
4,session.cookie_lifetime = 0, session.cookie_path = / 以及session.cookie_domain =
如果使用Cookie方法傳遞session_id的話,這裡分別指定了cookie有效域、目錄和時間。分別對應setcookie()函數的形參$expire、$path和$domain。其中cookie_lifetime=0表示直到關閉浏覽器才刪除Cookie。還可以使用session_set_cookie_params()函數修改這些值。
5,session_name([string $name])
獲取或更新session_name。如果傳了name,則表示不使用默認的名稱PHPSESSID(由session.name)指定,否則獲取當前session_name。注意:如果設置session_name,則必須在session_start()之前調用才生效。
6,session_id([string $id])
與session_name()類似,但它是讀取或者設置session_id的方法。同樣,設置session_id的話,必須在session_start()之前調用才有效。
7,session_set_cookie_params()和session_get_cookie_params()
通過session_set_cookie_params()可以重新設定session.cookie_lifetime, session.cookie_path以及session.cookie_domain這三個php.ini設置。而session_get_cookie_params()則是獲取這些設定的值。

這裡我自己特別去做了一張表,把他們的不同點和相同點總結了一下:

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