PHP會話管理之Cookie的使用

因爲HTTP本身是無狀態的連接協議,所以爲了記憶一些用戶的信息,我們就需要Cookie和Session這樣的會話管理,所以會話管理在任何Web開發語言中都是必不可少的。不過Cookie和Session的內容比較多,今天就總結一些PHP中Cookie的使用方法,加深一下記憶。

Cookie和Session不同的是Session默認是保存在服務器端和客戶端的(也可以保存在客戶端的硬盤上),而Cookie是保存在硬盤上的,所以使用Cookies之前我們必須先了解Cookie的幾個重要注意事項,以免使用過程中造成不必要的問題。

1. 切記不要使用Cookie保存重要的信息,尤其是神馬銀行卡、密碼等信息。我的習慣是保存一條記錄中無關緊要主鍵或者用戶名爲Cookie值,否則不管是360啊、瑞星啊都有可能把這些信息掃描了去。

2. 單一的域不能有超過20個Cookie,並且每個Cookis的長度爲4K字節。也就是說雖然Cookie也可以作爲頁面間傳值的方法之一,但是不要濫用Cookie,否則老的Cookie會被自動覆蓋,而超出4K字節的Cookie也會被截取,也就會造成錯誤了。

3. 使用Cookie前檢查客戶端瀏覽器是否支持Cookie,並且必須檢查要使用的Cookie是否存在,比如判斷isset($_COOKIE["userID"])。

然後我們就可以使用Cookie了,PHP裏面設置Cookie的函數爲setcookie()函數:bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )。其中string $name是要設置的cookie的名字,string $value是cookie的值,int $expire是cookie的過期時間,格式爲Linux時間戳,默認爲0,$path是指cookie起作用的目錄,如果設置爲“/”,那麼cookie在整個$domain都有作用,如果設置爲“/foo/”,那麼cookie只在$domain下的foo文件夾起作用,string $domain,cookie起作用的域,例如“feiyan.com”,bool $secure,是否僅作用域https://,bool $httponly,如果爲true那麼cookie僅能用在HTTP協議,JavaScript不能引用PHP的cookie,可以有效避免***的***。最後,如果成功設置cookie,setcookie就會返回true。

下面是一個通用的cookie使用類來說明cookie的詳細用法:

PHP語言:
<?php
/**
* @author FeiYan
* @copyright FeiYan.Info
* @name Cookie通用類
*/

 

class cookie
{
private $cookieName; //cookie名稱
private $cookieValue; //cookie值
private $cookieExpire; //cookie過期時間

function __construct(){
//構造函數
if(func_num_args()>0)
{
$args = func_get_args();
//獲取參數並賦值
$this->cookieName = $args[0];
$this->cookieValue = $args[1];
$this->cookieExpire = $args[2];
$this->cookieMake();
}
}

public function cookieMake()
{
try
{
if($this->cookieName!=“” && $this->cookieValue!=“” && $this->cookieExpire!=“”)
{
setcookie($this->cookieName,$this->cookieValue,time()+$this->cookieExpire);
//創建Cookie,設置Cookie名字、值和有效期
}
else
{
throw new exception(“您必須設置Cookie名字和有效期”);
}
}
catch(exception $e)
{
echo $e->getmessage();
}
}

/**
* 修改指定Cookie的值
* @param string $newValue
* @return null
*/
public function changeCookie($newValue)
{
$_COOKIE["$this->cookieName"] = $newValue;
}

/**
* 從指定Cookie獲取值
* @return string
*/
public function getCookieValue()
{
return $_COOKIE["$this->cookieName"];
}

/**
* 刪除Cookie中的某個值
*/
public function removeCookie()
{
setcookie($this->cookieName,$this->cookieValue,time()-3600);
}
}
?>

接下來就是使用這個類了,下面的代碼是使用這個類的示例:

PHP語言:
<?php
$cookie = new cookie(“userName”,“飛晏”,3600);
echo “Cookie的值是:”.$cookie->getCookieValue().“<br />”;
//輸出:Cookie的值是:飛晏
$cookie->changeCookie(“晏飛”);
//改變Cookie的值
echo “Cookie的值是:”.$cookie->getCookieValue().“<br />”;
//輸出:Cookie的值是:晏飛
?>

在大量使用Cookie的時候,可以把一些列的Cookie數據存入到一個PHP數組中,代碼如下:

PHP語言:
<?php
setcookie(“userInfo[userName]“, “飛晏”);
setcookie(“userInfo[userGender]“, “男”);
setcookie(“userInfo[userHobby]“, “女”);
if(isset($_COOKIE["userInfo"]))
{
foreach($_COOKIE["userInfo"] as $k=>$v)
{
echo $k.“:”.$v.“<br />”;
}
}
?>

PHP中操作Cookie的基本用法也就這麼多了,相比C#裏面的Cookie的用法原理基本上一致的,只不過微軟提供了更多的封裝,趕明兒得空繼續總結PHP中的Session的用法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章