Jason Lai

  • 首頁
  • 我的書單
所有文章 关于我

Jason Lai

  • 首頁
  • 我的書單

php-Cookies

2019-02-06

接下來的這部分要介紹 PHP 的 Cookies
先來簡單介紹一下 Cookie 吧
Cookie 是一個很小的檔案,透過伺服器嵌入到使用者的電腦裡
而透過存放在 Cookie 裡面的資訊,可以讓我們了解到使用者有過哪些操作行為,正所謂凡走過必留下痕跡就是像 Cookie 這樣的應用~
舉例來說…
我們若有瀏覽一些網拍的網站的話,之後就常常會在瀏覽其他網頁的時候,看到曾經瀏覽過的商品出現在旁邊的廣告欄位..
這就是 Cookie 的應用
而一般也因為 Cookie 是存放在使用者的電腦裡,考量到安全性的疑慮
所以不會在 Cookie 裡面存放太過隱密的資訊,避免洩漏重要的資料~

簡單介紹完後,下面就分別來介紹 PHP Cookie 的 CRUD 吧~

  1. Create
  2. Retrieve
  3. Update
  4. Delete

1. Create

在 PHP 當中提供兩種函式去建立 Cookie
分別是 setcookie 和 setrawcookie
這邊先提一下!
其實兩者在參數傳遞的部分是相同的
唯一的差異在於是否會對 URL 進行編碼
使用 setcookie 的時候會自動對 URL 編碼;而使用 setrawcookie 則不會~
在一般的情況下,我們都會使用 setcookie 為主
不過有部分的瀏覽器,像是 firefox 這些在讀取編碼過的 URL 會發生問題
所以這種情況下就得要使用 setrawcookie 才可以順利建立!!!

而底下的介紹會以 setcookie 為主~

先來介紹一下 setcookie 可以傳入的參數
|參數名稱|型態|介紹|
|:——-|:–:|:–:|
|Name|String|Cookie 名稱|
|Value|String|Cookie 存放的數值|
|Expire|Integer|Cookie 的過期時間|
|Path|String|有效可以存取 Cookie 的網域|
|Domain|String|Cookie 存放的數值|
|Secure|Boolean|設定是否只能以 https 的方式傳送 Cookie|
|Httponly|Boolean|設定是否只能在 server-side 存取 Cookie,拒絕使用 Javascript 等腳本存取|

這些參數當中只有名稱和數值是必填,其餘的參數都有預設值~
接著就來看看範例吧!

1
2
3
setcookie('name', 'Jason');

echo $_COOKIE['name']; // 結果會印出 "Jason"

特別要注意的是
Cookie 屬於 http 標頭的一部分,所以須要在資料送給瀏覽器之前就建立 Cookie
換句話說,就是要在 html 的 標簽之前呼叫這兩種函式去建立 Cookie 才行~

2. Retrieve

至於 PHP 的 Cookie 會全部都存放在 $_COOKIE 這個全域變數中
其實在前一小節已經有偷偷暴露出取得 Cookie 的方法了~
使用陣列的方式,可以取得對應 Cookie 名稱的 Cookie~

$_COOKIE[‘name’] 像這樣子就是取得名稱是 name 的 Cookie~
而若是 Cookie 不存在的話,也會像空陣列一樣返回 NULL 值

3. Update

而修改 Cookie 數值的方式也同樣是使用 setcookie 或是 setrawcookie
使用相同的 Cookie 名稱進行賦值的話,就會修改已存在 Cookie 的數值了~
是不是非常簡單呢~

要注意因為 cache 的關係導致顯是結果會有點誤差
建議可以使用 chrome cookie 擴充功能或是使用無痕瀏覽~

1
2
3
4
5
6
7
setcookie('name', 'Jason');

echo $_COOKIE['name']; // 結果會印出 "Jason"

setcookie('name', 'Bob');

echo $_COOKIE['name']; // 結果會印出 "Bob"

4. Delete

而刪除 Cookie 的方法也可以說成是讓 Cookie 過期
還記得前面曾經提過在 setcookie 當中有一個 expire 參數嗎?
它代表的是這個 Cookie 的有效使用期限
當我們將特定 Cookie 的有效使用期間改成過去的時間 (也就是負值),那就代表將這個 Cookie 給刪除了~

1
2
3
4
5
6
7
setcookie('name', 'Jason');

echo $_COOKIE['name']; // 結果會印出 "Jason"

setcookie('name', 'Jason', time()-3600);

echo $_COOKIE['name']; // 因為 Cookie 已經過期,所以不會顯示任何東西
  • php

扫一扫,分享到微信

微信分享二维码
php-Sessions
php-Exceptions
© 2019 Jason Lai
Hexo Theme Yilia by Litten
  • 所有文章
  • 关于我

tag:

  • php

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

還在學習的程式新手
請大家多多包涵!