# Cookie
ThinkPHP使用`think\Cookie`類提供Cookie支持。
## 初始化
大多數情況下,我們不需要進行`Cookie`的初始化,系統會在調用`Cooie`類方法的時候自動根據`cache`配置參數初始化,如果需要可以手動使用`init`方法進行初始化設置,例如:
```
<pre class="calibre18">
```
<span class="hljs-comment">// cookie初始化</span>
Cookie::init([<span class="hljs-string">'prefix'</span>=><span class="hljs-string">'think_'</span>, <span class="hljs-string">'expire'</span>=><span class="hljs-number">3600</span>, <span class="hljs-string">'path'</span>=><span class="hljs-string">'/'</span>]);
<span class="hljs-comment">// 單獨指定當前前綴</span>
Cookie::prefix(<span class="hljs-string">'think_'</span>);
```
```
支持的參數及默認值如下:
```
<pre class="calibre18">
```
<span class="hljs-comment">// cookie 名稱前綴</span><span class="hljs-string">'prefix'</span> => <span class="hljs-string">''</span>,
<span class="hljs-comment">// cookie 保存時間</span><span class="hljs-string">'expire'</span> => <span class="hljs-number">0</span>,
<span class="hljs-comment">// cookie 保存路徑</span><span class="hljs-string">'path'</span> => <span class="hljs-string">'/'</span>,
<span class="hljs-comment">// cookie 有效域名</span><span class="hljs-string">'domain'</span> => <span class="hljs-string">''</span>,
<span class="hljs-comment">// cookie 啟用安全傳輸</span><span class="hljs-string">'secure'</span> => <span class="hljs-keyword">false</span>,
<span class="hljs-comment">// httponly設置</span><span class="hljs-string">'httponly'</span> => <span class="hljs-string">''</span>,
<span class="hljs-comment">// 是否使用 setcookie</span><span class="hljs-string">'setcookie'</span> => <span class="hljs-keyword">true</span>,
```
```
## 讀取Cookie
建議的讀取`Cookie`數據的方法是通過`Request`請求對象的`cookie`方法(原因和Session讀取一樣),例如:
```
<pre class="calibre18">
```
<span class="hljs-keyword">namespace</span> <span class="hljs-title">app</span>\<span class="hljs-title">index</span>\<span class="hljs-title">controller</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">think</span>\<span class="hljs-title">Request</span>;
<span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span></span>{
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">index</span><span class="hljs-number">(Request <span class="hljs-regexp">$request</span>)</span></span>{
<span class="hljs-keyword">echo</span> <span class="hljs-regexp">$request</span>->cookie(<span class="hljs-string">'user_name'</span>);
<span class="hljs-comment">// 讀取二維數組</span><span class="hljs-keyword">echo</span> <span class="hljs-regexp">$request</span>->cookie(<span class="hljs-string">'user.name'</span>);
}
}
```
```
> 通過Request對象讀取Cookie數據支持默認值及過濾方法,因此也更加安全,并且支持多維數組的讀取。
當然也支持使用`Cookie`類直接讀取數據:
```
<pre class="calibre18">
```
<span class="hljs-keyword">namespace</span> <span class="hljs-title">app</span>\<span class="hljs-title">index</span>\<span class="hljs-title">controller</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">think</span>\<span class="hljs-title">Cookie</span>;
<span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span></span>{
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">index</span><span class="hljs-number">()</span></span>{
<span class="hljs-keyword">echo</span> Cookie::get(<span class="hljs-string">'user_name'</span>);
}
}
```
```
> Cookie::get方法不支持讀取二維數組數據。
## 模板輸出
同樣,可以使用下面的方法在模板文件中輸出Cookie值。
```
<pre class="calibre18">
```
{<span class="hljs-regexp">$Request</span>.cookie.user_name}
```
```
## `Cookie`操作
下面是一些關于Cookie的基礎操作方法。
### 設置
```
<pre class="calibre18">
```
<span class="hljs-comment">// 設置Cookie 有效期為 3600秒</span>
Cookie::set(<span class="hljs-string">'name'</span>,<span class="hljs-string">'value'</span>,<span class="hljs-number">3600</span>);
<span class="hljs-comment">// 設置cookie 前綴為think_</span>
Cookie::set(<span class="hljs-string">'name'</span>,<span class="hljs-string">'value'</span>,[<span class="hljs-string">'prefix'</span>=><span class="hljs-string">'think_'</span>, <span class="hljs-string">'expire'</span>=><span class="hljs-number">3600</span>]);
<span class="hljs-comment">// 支持數組</span>
Cookie::set(<span class="hljs-string">'name'</span>,[<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>]);
```
```
### 判斷
```
<pre class="calibre18">
```
<span class="hljs-regexp">Cookie</span>::<span class="hljs-function">has</span>(<span class="hljs-string">'name'</span>);
<span class="hljs-comment">// 判斷指定前綴的cookie值是否存在</span><span class="hljs-regexp">Cookie</span>::<span class="hljs-function">has</span>(<span class="hljs-string">'name'</span>,<span class="hljs-string">'think_'</span>);
```
```
### 獲取
```
<pre class="calibre18">
```
<span class="hljs-regexp">Cookie</span>::<span class="hljs-function">get</span>(<span class="hljs-string">'name'</span>);
<span class="hljs-comment">// 獲取指定前綴的cookie值</span><span class="hljs-regexp">Cookie</span>::<span class="hljs-function">get</span>(<span class="hljs-string">'name'</span>,<span class="hljs-string">'think_'</span>);
```
```
### 刪除
//刪除cookie
```
<pre class="calibre18">
```
<span class="hljs-regexp">Cookie</span>::<span class="hljs-function">delete</span>(<span class="hljs-string">'name'</span>);
<span class="hljs-comment">// 刪除指定前綴的cookie</span><span class="hljs-regexp">Cookie</span>::<span class="hljs-function">delete</span>(<span class="hljs-string">'name'</span>,<span class="hljs-string">'think_'</span>);
```
```
### 清空
```
<pre class="calibre18">
```
<span class="hljs-comment">// 清空指定前綴的cookie</span><span class="hljs-regexp">Cookie</span>::<span class="hljs-function">clear</span>(<span class="hljs-string">'think_'</span>);
```
```
> 注意,目前不支持清空所有的`Cookie`數據,如果必須這樣做,請直接操作`$_COOKIE`變量。
## 助手函數
系統提供了`cookie`助手函數用于基本的`Cookie`操作,可以完成前面的所有功能,例如:
```
<pre class="calibre42">
```
<span class="hljs-comment">// 初始化</span>
cookie([<span class="hljs-string">'prefix'</span> => <span class="hljs-string">'think_'</span>, <span class="hljs-string">'expire'</span> => <span class="hljs-number">3600</span>]);
<span class="hljs-comment">// 設置</span>
cookie(<span class="hljs-string">'name'</span>, <span class="hljs-string">'value'</span>, <span class="hljs-number">3600</span>);
<span class="hljs-comment">// 判斷</span>
cookie(<span class="hljs-string">'?name'</span>);
<span class="hljs-comment">// 獲取</span><span class="hljs-keyword">echo</span> cookie(<span class="hljs-string">'name'</span>);
<span class="hljs-comment">// 刪除</span>
cookie(<span class="hljs-string">'name'</span>, <span class="hljs-keyword">null</span>);
<span class="hljs-comment">// 清除</span>
cookie(<span class="hljs-keyword">null</span>, <span class="hljs-string">'think_'</span>);
```
```
- 脕茫隆壟脨貌脩脭
- 脕茫隆壟脨貌脩脭
- 脪祿隆壟祿霉麓隆
- 脪祿隆壟祿霉麓隆
- 露鎂隆壟URL潞脥脗路脫脡
- 露鎂隆壟URL潞脥脗路脫脡
- 脠媒隆壟脟毛脟貿潞脥脧矛脫婁
- 脠媒隆壟脟毛脟貿潞脥脧矛脫婁
- 脣脛隆壟脢媒戮脻驢芒
- 脣脛隆壟脢媒戮脻驢芒
- 脦氓隆壟虜茅脩爐脫茂脩脭
- 脦氓隆壟虜茅脩爐脫茂脩脭
- 脕霉隆壟脛攏脨脥潞脥鹿脴脕陋
- 攏簍1攏漏脛攏脨脥露簍脪氓
- 攏簍2攏漏祿霉麓隆虜脵脳梅
- 攏簍3攏漏露脕脠隆脝梅潞脥脨脼賂脛脝梅
- 攏簍4攏漏脌脿脨脥脳陋祿祿潞脥脳脭露爐脥錨魯脡
- 攏簍5攏漏虜茅脩爐路露脦摟
- 攏簍6攏漏脢盲脠毛潞脥脩茅脰隴
- 攏簍7攏漏鹿脴脕陋
- 攏簍8攏漏脛攏脨脥脢盲魯枚
- 脝脽隆壟脢脫脥錄潞脥脛攏擄氓
- 脝脽隆壟脢脫脥錄潞脥脛攏擄氓
- 擄脣隆壟碌梅脢脭潞脥脠脮脰戮
- 擄脣隆壟碌梅脢脭潞脥脠脮脰戮
- 戮脜隆壟API驢陋路壟
- 戮脜隆壟API驢陋路壟
- 脢廬隆壟脙眉脕卯脨脨鹿隴戮脽
- 脢廬隆壟脙眉脕卯脨脨鹿隴戮脽
- 脢廬脪祿隆壟脌漏脮鹿
- 脢廬脪祿隆壟脌漏脮鹿
- 脢廬露鎂隆壟脭脫脧卯
- Cookie
- Session
- 碌樓脭陋虜芒脢脭
- 脥錄脧帽麓婁脌鉚
- 脦脛錄鎂脡脧麓蘆
- 脩茅脰隴脗毛
- 賂陸脗錄
- A隆壟魯攏錄沒脦脢脤芒錄爐
- B隆壟3.2潞脥5.0脟酶鹵冒
- C隆壟脰煤脢脰潞爐脢媒
- 路盧脥芒脝陋攏潞脩摟脧擄ThinkPHP5碌脛脮媒脠路脳脣脢脝
- 路盧脥芒脝陋攏潞脩摟脧擄ThinkPHP5碌脛脮媒脠路脳脣脢脝