站長資訊網
        最全最豐富的資訊網站

        php cookie(專題)

        本專題通過圖文、視頻的形式全面介紹了php cookie的由來,php cookie屬性有哪些,php cookie函數用法以及php cookie實際應用實例,通俗易懂!歡迎php中文網的同學們學習!

        php cookie(專題)

        一:什么是 Cookie ?

        cookie 常用于識別用戶。

        cookie 是一種服務器留在用戶計算機上的小文件。

        每當同一臺計算機通過瀏覽器請求頁面時,這臺計算機將會發送 cookie。

        通過 PHP,您能夠創建并取回 cookie 的值。

        相關專題推薦:php session

        二:Cookie 的誕生

        由于HTTP協議是無狀態的,而服務器端的業務必須是要有狀態的。

        Cookie誕生的最初目的是為了存儲web中的狀態信息,以方便服務器端使用。

        比如判斷用戶是否是第一次訪問網站。目前最新的規范是RFC 6265,它是一個由瀏覽器服務器共同協作實現的規范。

        三:Cookie 的原理

        php cookie(專題)

        第一次訪問網站的時候,瀏覽器發出請求,服務器響應請求后,會將cookie放入到響應請求中,在瀏覽器第二次發請求的時候,會把cookie帶過去,服務端會辨別用戶身份,當然服務器也可以修改cookie內容。

        四:Cookie 屬性

        Cookie是一段不超過4KB的小型文本數據,由一個名稱(Name)、一個值(Value)和其它幾個用于控制Cookie有效期、安全性、使用范圍的可選屬性組成。

        php cookie(專題)

        Name 表示 Cookie 的名稱。
        Value

        表示 Cookie 的值。

        Domain

        指定了可以訪問該 Cookie 的 Web 站點或域。

        Cookie 機制并未遵循嚴格的同源策略,允許一個子域可以設置或獲取其父域的 Cookie。

        Path

        定義了Web站點上可以訪問該Cookie的目錄。

        Expires

        什么是有效期,就是圖中的Expires屬性,一般瀏覽器的cookie都是默認儲存的,當關閉瀏覽器結束這個會話的時候,這個cookie也就會被刪除。

        Secure

        指定是否使用HTTPS安全協議發送Cookie。

        使用HTTPS安全協議,可以保護Cookie在瀏覽器和Web服務器間的傳輸過程中不被竊取和篡改。該方法也可用于Web站點的身份鑒別,即在HTTPS的連接建立階段,瀏覽器會檢查Web網站的SSL證書的有效性。

        HttpOnly 用于防止客戶端腳本通過document.cookie屬性訪問Cookie,有助于保護Cookie不被跨站腳本攻擊竊取或篡改。

        五:PHP Cookie 函數

        1、setcookie — 發送 Cookie

        setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool

        setcookie() 定義了 Cookie,會和剩下的 HTTP 頭一起發送給客戶端。

        和其他 HTTP 頭一樣,必須在腳本產生任意輸出之前發送 Cookie(由于協議的限制)。

        請在產生任何輸出之前(包括 <html> 和 <head> 或者空格)調用本函數。

        一旦設置 Cookie 后,下次打開頁面時可以使用 $_COOKIE 讀取。

        Cookie 值同樣也存在于 $_REQUEST。

        參數

        參數 描述
        name Cookie 名稱。
        value

        Cookie 值。 這個值儲存于用戶的電腦里,請勿儲存敏感信息。

        expire

        Cookie 的過期時間。

        這是個 Unix 時間戳,即 Unix 紀元以來的秒數。

        也就是說,基本可以用 time() 函數的結果加上希望過期的秒數。

        path

        Cookie 有效的服務器路徑。

        設置成 '/' 時,Cookie 對整個域名 domain 有效。

        如果設置成 '/foo/', Cookie 僅僅對 domain 中 /foo/ 目錄及其子目錄有效。

        默認值是設置 Cookie 時的當前目錄。

        domain

        Cookie 的有效域名/子域名。

        設置成子域名,會使 Cookie 對這個子域名和它的三級域名有效。

        要讓 Cookie 對整個域名有效,只要設置成域名就可以了。

        secure

        設置這個 Cookie 是否僅僅通過安全的 HTTPS 連接傳給客戶端。

        設置成 TRUE 時,只有安全連接存在時才會設置 Cookie。

        如果是在服務器端處理這個需求,程序員需要僅僅在安全連接上發送此類 Cookie 。

        httponly

        設置成 TRUE,Cookie 僅可通過 HTTP 協議訪問。

        這意思就是 Cookie 無法通過類似 JavaScript 這樣的腳本語言訪問。

        要有效減少 XSS 攻擊時的身份竊取行為,可建議用此設置,不過這個說法經常有爭議。

        返回值

        如果在調用本函數以前就產生了輸出,setcookie() 會調用失敗并返回 FALSE。

        如果 setcookie() 成功運行,返回 TRUE。

        示例

        <?php $value = 'something from somewhere';  setcookie("TestCookie", $value); setcookie("TestCookie", $value, time()+3600);  /* 1 小時過期  */ setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1); ?>

        2、setrawcookie — 發送未經 URL 編碼的 cookie

        setrawcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool

        setrawcookie() 和 setcookie() 非常相似,唯一不同之處是發送到瀏覽器的 cookie 值沒有自動經過 URL 編碼(urlencode)。

        六:PHP Cookie 簡單示例

        1、基本操作

        <?php  //添加Cookie setcookie('username', 'phpcn', time() + 3600);  //獲取Cookie $username = $_COOKIE['username'];  //刪除Cookie setcookie('username', '', time() - 3600);  //修改Cookie setcookie('username', 'phpcn-updated', time() + 3600);  ?>

        2、面向過程封裝

        <?php  /**  * 獲取 Cookie  * @param  string $name Cookie 名稱  * @return mixed       Cookie 值  */ function cookie_get($name) { 	return isset($_COOKIE[$name]) ? $_COOKIE[$name] : null; }  /**  * 刪除 Cookie  * @param  string $name Cookie 名稱  */ function cookie_del($name) { 	setcookie($name, '', time() - 3600); }  /**  * 設置Cookie  * @param  string  $name   Cookie 名稱  * @param  mixed  $value  Cookie 值  * @param  integer $expire Cookie 過期時間  * @param  string  $path   Cookie 有效路徑  * @param  string  $domian Cookie 有效域名/子域名  */ function cookie_set($name, $value, $expire = 3600, $path = '/', $domian = '') { 	setcookie($name, $value, time() + $expire); }  /**  * 檢測 Cookie  * @param  string  $name      Cookie 名稱  * @param  boolean $has_empty 檢測為空  * @return boolean               */ function cookie_has($name) { 	return isset($_COOKIE[$name]); }  ?>

        3、面向對象封裝

        <?php   class Cookie {     const OPTION_EXPIRE = 'expire';     const OPTION_PATH = 'path';     const OPTION_DOMAIN = 'domain';     const OPTION_SECURE = 'secure';     const OPTION_HTTPONLY = 'httponly';      /**      * Cookie 實例      * @var null      */     private static $instance = null;      /**      * Cookie 選項      * @var array      */     private $options = [         self::OPTION_EXPIRE => 3600,         self::OPTION_PATH => '/',         self::OPTION_DOMAIN => 'domain',         self::OPTION_SECURE => false,         self::OPTION_HTTPONLY => false     ];      /**      * Cookie constructor.      * @param $options      */     private function __construct($options)     {         $this->setOptions($options);     }      /**      *  privated __clone      */     private function __clone()     {      }      /**      * 獲取實例      * @param $options      * @return Cookie|null      */     public static function getInstance($options)     {         if (is_null(self::$instance)) {             self::$instance = new self($options);         }          return self::$instance;     }      /**      * 設置選項      * @param $name      * @param $value      */     public function setOption($name, $value)     {         if (isset($this->options[$name])) {             $this->options[$name] = $value;         }          throw new InvalidArgumentException('Cookie option not exists:{$name}');     }      /**      * 設置多個選項      * @param $options      */     public function setOptions($options)     {         foreach ($options as $name => $value) {             $this->setOption($name, $value);         }     }      /**      * 設置 Cookie      * @param $name      * @param $value      * @param array $options      */     public function set($name, $value, $options = [])     {         $this->setOptions($options);          if (is_array($value) || is_object($value)) {             $value = json_encode($value);         }          setcookie(             $name,             $value,             $this->options[self::OPTION_EXPIRE],             $this->options[self::OPTION_PATH],             $this->options[self::OPTION_DOMAIN],             $this->options[self::OPTION_SECURE],             $this->options[self::OPTION_HTTPONLY]         );     }      /**      * 獲取 Cookie      * @param $name      * @return array|mixed      */     public function get($name)     {         $value = $_COOKIE[$name];          if (is_array($value)) {             $arr=[];             foreach ($value as $k => $v) {                 $arr[$k] = substr($v, 0,1) == '{' ? json_decode($value) : $v;             }             return $arr;         } else {             return substr($value, 0,1) == '{' ? json_decode($value) : $value;         }     }      /**      * 刪除 Cookie      * @param $name      * @param array $options      */     public function del($name, $options = [])     {         $this->setOptions($options);          $value = $_COOKIE[$name];          if ($value) {             if (is_array($value)) {                 foreach ($value as $k => $v) {                     setcookie(                         $name . '[' . $k . ']',                         '',                         time() - 3600,                         $this->options[self::OPTION_EXPIRE],                         $this->options[self::OPTION_PATH],                         $this->options[self::OPTION_DOMAIN],                         $this->options[self::OPTION_SECURE],                         $this->options[self::OPTION_HTTPONLY]                     );                     unset($v);                 }             }else{                 setcookie(                     $name,                     '',                     time() - 3600,                     $this->options[self::OPTION_EXPIRE],                     $this->options[self::OPTION_PATH],                     $this->options[self::OPTION_DOMAIN],                     $this->options[self::OPTION_SECURE],                     $this->options[self::OPTION_HTTPONLY]                 );                 unset($value);             }         }     } }

        4、記住登錄賬號示例

        <?php  function cookie_get_username() {     return isset($_COOKIE['username']) ? $_COOKIE['username'] : null; }  function cookie_get_password() {     return isset($_COOKIE['username']) ? $_COOKIE['username'] : null; }  function cookie_get_remember() {     return isset($_COOKIE['remember']) ? 'checked' : null; }   if ($_SERVER['REQUEST_METHOD'] === 'POST') {      $username = $_POST['username'];     $password = $_POST['password'];      if (isset($_POST['remember']) && $_POST['remember'] === '1') {         setcookie('username', $username, time() + 3600);         setcookie('password', $password, time() + 3600);         setcookie('remember', '1', time() + 3600);     } else {         setcookie('username', '', time() - 3600);         setcookie('password', '', time() - 3600);         setcookie('remember', '', time() - 3600);     }      die('登錄成功!'); }  ?>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <form action="" method="post">     <table width="300" border="1" align="center" cellpadding="5" cellspacing="5">         <thead>         <tr>             <td colspan="2" align="center"><b>登錄</b></td>         </tr>         </thead>         <tr align="center">             <td>用 戶 名</td>             <td><input type="text" name="username" value="<?=cookie_get_username()?>"></td>         </tr>         <tr align="center">             <td>密碼</td>             <td><input type="password" name="password" value="<?=cookie_get_password()?>"></td>         </tr>         <tr align="center">             <td>記住賬號</td>             <td>                 <input type="checkbox" name="remember" value="1" <?=cookie_get_remember()?>>             </td>         </tr>         <tr align="center">             <td colspan="2"><input type="submit" name="Submit" value="提交" /></td>         </tr>     </table> </form>

        六:php cookie 精選技術文章

        待添加

        七:php cookie 相關視頻教程

        待添加

      1. 微信
      2. 分享
      3. php cookie(專題)

      4. 相關標簽:cookie
      5. 本文原創發布php中文網,轉載請注明出處,感謝您的尊重!
        • 上一篇:2020年ajax面試題及答案(最新)
        • 下一篇:沒有了
        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲国产另类久久久精品| 精品无码久久久久国产| 蜜芽亚洲av无码精品色午夜| 国产欧美日韩综合精品一区二区三区 | 国产欧美日韩精品专区| 国产精品久久久久天天影视| 一本大道无码日韩精品影视| 国产91精品黄网在线观看| 国产精品久久久久国产A级| 欲帝精品福利视频导航| 精品日韩在线视频一区二区三区| 免费精品99久久国产综合精品| 精品无码国产一区二区三区51安 | 久久久久久无码国产精品中文字幕| 精品999在线| 国产精品水嫩水嫩| 无码国产精品一区二区免费16 | 日本精品自产拍在线观看中文 | 国产精品第六页| 欧美亚洲国产精品第一页| 国产精品视频二区不卡| 日本aⅴ精品中文字幕| 一本色道久久88精品综合| 亚洲国产主播精品极品网红| 久久国产乱子伦精品免费午夜| 国产精品欧美久久久久无广告| 成人国产精品动漫欧美一区| 日本精品久久久久中文字幕| 精品久久久久久亚洲| 久久91综合国产91久久精品| 成人国产精品高清在线观看| 精品视频无码一区二区三区 | 国产午夜精品一区二区三区不卡 | 97精品人妻系列无码人妻| 国产精品禁18久久久夂久| 国产精品99久久99久久久| 99re8这里有精品热视频免费| 国产精品亚洲片在线va| 亚洲国产精品久久久久婷婷软件 | 色欲国产麻豆一精品一AV一免费 | 国内精品伊人久久久久网站|