1. 程式人生 > >2018/04/21 PHP 中的Session和Cookie知識總結

2018/04/21 PHP 中的Session和Cookie知識總結

結束 方式 全局變量 過期 ESS 簡單 star 如何 lencod

在之後的工作和學習中,更是發現了自己對於基礎知識的不紮實,於是又返回頭來學習,確實很多東西是之前沒註意或是沒掌握的。

著重講一下這幾個問題

--

什麽是 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知識總結