2018/04/21 PHP 中的Session和Cookie知識總結
在之後的工作和學習中,更是發現了自己對於基礎知識的不紮實,於是又返回頭來學習,確實很多東西是之前沒註意或是沒掌握的。
著重講一下這幾個問題
--
什麽是 Cookie ?
簡單來說:
因為 HTTP 無狀態的,所以為了想在客戶端保存一些數據來和服務端進行交互,我們需要在客戶端存一部分數據,就是 Cookie 。
PHP 如何設置 Cookie 呢?
看一下 PHP 官方對於設置 Cookie 函數的定義
bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )
介紹一下 setcookie() 這裏面參數的含義
$name 顧名思義,設置 Cookie 的名字。
$value 設置這個 Cookie 的值。
$expire 設置 Cookie 的過期時間,如果不設置或者為空,則表示在關閉瀏覽器時候銷毀 Cookie。
註意,這個時間是真正意義上的結束時間,應該是以你當前的時間+過期時間來完成的,單位為秒。
例如:
setcookie(‘name‘, ‘hong.li‘, time() + 7*24*3600); // 當前時候後一周過期。
$path Cookie 有效的服務器路徑。 默認值是設置 Cookie 時的當前目錄。
設置成 ‘/‘ 時,Cookie 對整個域名 domain
有效。
如果設置成 ‘/foo/‘, Cookie 僅僅對 domain
中 /foo/ 目錄及其子目錄有效(比如 /foo/bar/)。
$domain 設置跨域。
$secure 是否只接受 HTTPS 傳來的 Cookie ,默認為 false;
$httponly 是否只接受 HTTP 協議發來的Cookie,不允許 JS 來直接操作 Cookie ,可以有效防止 XXS 攻擊,同時也可以在 php.ini 中設置。
--
除了 setcookie 這種方法,還有其他的方法可以設置 cookie 麽?
當然是有的,先說一個 PHP 設置 Cookie 的其他一個函數
bool setrawcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )
它和 setcookie 的唯一區別就是 setcookie 會對值進行 urlencode 編碼,而他不會。
第二種方式是直接發送一個 HTTP 頭,指定 Set-cookie ,在瀏覽器中,會認為你是設置 cookie 的屬性
header(‘Set-cookie: username=hong.li‘);
再看看你的瀏覽器們是不是有這個 Cookie 了。
--
如何刪除我們已經設置好的 Cookie 呢?
瀏覽器手動刪除,哈哈~
通過 PHP 直接把 Cookie 設置成已過期的時間,Cookie就會被刪除。
--
已經有了 Cookie 可以設置信息了,我們還用 SESSION 幹什麽?
我們都知道 Cookie 是存在客戶端的。是容易篡改的,再說也不能使用一個客戶端的憑證來判斷用戶身份吧。
扯遠了。。。。。。
總之,使用 Cookie 信息是遠遠不夠的,SESSION 是服務端的一種存儲狀態。
--
SESSION 原理是什麽?
在開始了 session 之後,在瀏覽器訪問這個頁面時候。
1:服務端會檢測 是否有 SESSION .
2: 如果沒有,則產生一個隨機的 PHPSESSID, 並且自動發送發送一個 Cookie,這個 Cookie 在關閉瀏覽器後消失。
3:如果有,則讀取對應 SESSION 信息。
--
如何使用SESSION?
在 PHP 我們首先需要初始化 SESSION。
session_start();
之後可以在 $_SESSION 這個全局變量中增加或者我們的值
$_SESSION[‘username‘] = ‘hong.li‘;
之後我們就可以取到對應的值了。
需要註意的是,雖然我們使用的默認 Cookie ,保存了 SESSION_ID 的信息,但是這個信息會在關閉瀏覽器後消失,我們明顯不想這樣。於是我們會在這裏使用 setcookie 來設置我們的信息。
setcookie(‘username‘,‘hong.i‘,time()+3600);
--
2018/04/21 PHP 中的Session和Cookie知識總結