session
獲取數據
public function showProfile(Request $request, $id) {
$value = $request->session()->get('key');
//
}
存儲數據
獲取到session實例後,就可以調用多個方法來與底層數據進行交互,例如,put方法存儲新的數據到session中:
//通過put方法
$request->session()->put('key', 'value');
//通過全局輔助函數
session(['key' => 'value']);
刪除數據
forget方法從session中移除指定數據,如果你想要從session中移除所有數據,可以使用flush方法:
$request->session()->forget('key');
$request->session()->flush();
上一次請求輸入
Laravel 允許你在兩次請求之間保存上一次輸入數據,這個特性在檢測校驗數據失敗後需要重新填充表單數據時很有用,不過如果你使用的是 Laravel 自帶的驗功能,則不需要手動使用這些方法,因爲一些 Laravel 自帶的校驗設置會自動調用它們。
將輸入存儲到Session
Illuminate\Http\Request 實例的 flash 方法會將當前輸入存放到一次性 Session(所謂的一次性指的是從 Session 中取出數據後,對應數據會從 Session 中銷燬)中,這樣在下一次請求時上一次輸入的數據依然有效:
$request->flash();
你還可以使用 flashOnly 和 flashExcept 方法將輸入數據子集存放到 Session 中,這些方法在 Session 之外保存敏感信息時很有用,該功能適用於登錄密碼填寫錯誤的場景:
$request->flashOnly('username', 'email');
$request->flashExcept('password');
將輸入存儲到 Session 然後重定向
如果你經常需要一次性存儲輸入請求輸入並返回到表單填寫頁,可以在 redirect() 之後調用 withInput() 方法實現這樣的功能:
return redirect('form')->withInput();
return redirect('form')->withInput($request->except('password'));
取出上次請求數據
要從 Session 中取出上次請求的輸入數據,可以使用 Request 實例提供的 old 方法。old 方法可以很方便地從 Session 中取出一次性數據:
$username = $request->old('username');
Laravel 還提供了一個全局的輔助函數 old(),如果你是在 Blade 模板中顯示上次輸入數據,使用輔助函數 old() 更方便,如果給定參數沒有對應輸入,返回 null:
<input type="text" name="username" value="{{ old('username') }}">
Cookie
從請求中取出Cookie
爲了安全起見,Laravel 框架創建的所有 Cookie 都經過加密並使用一個認證碼進行簽名,這意味着如果客戶端修改了它們則需要對其進行有效性驗證。我們使用 Illuminate\Http\Request 實例的 cookie 方法從請求中獲取 Cookie 的值:
$value = $request->cookie('name');
添加Cookie到響應
你可以使用 cookie 方法將一個 Cookie 添加到返回的 Illuminate\Http\Response 實例,你需要傳遞 Cookie 名稱、值、以及有效期(分鐘)到這個方法:
return response('歡迎來到 Laravel 學院')->cookie( 'name', '學院君', $minutes );
cookie 方法可以接收一些使用頻率較低的參數,一般來說,這些參數和 PHP 原生函數 setcookie 作用和意義一致:
return response('歡迎來到 Laravel 學院')->cookie( 'name', '學院君', $minutes, $path, $domain, $secure, $httpOnly );
我們簡單演示下該功能的使用,在 routes/web.php 定義兩個路由如下:
Route::get('cookie/add', function () {
$minutes = 24 * 60;
return response('歡迎來到 Laravel 學院')->cookie('name', '學院君', $minutes);
});
Route::get('cookie/get', function(\Illuminate\Http\Request $request) {
$cookie = $request->cookie('name');
dd($cookie);
});
先訪問 http://blog.dev/cookie/add 設置 Cookie,然後再通過 http://blog.dev/cookie/get 獲取 Cookie 值,如果在頁面看到輸出 學院君,則表示 Cookie 設置成功。
生成Cookie實例
如果你想要生成一個 Symfony\Component\HttpFoundation\Cookie 實例以便後續添加到響應實例,可以使用全局輔助函數 cookie,該 Cookie 只有在添加到響應實例上纔會發送到客戶端:
$cookie = cookie('name', '學院君', $minutes);
return response('歡迎來到 Laravel 學院')->cookie($cookie);
我們改寫下之前的 cookie/add 路由實現邏輯:
Route::get('cookie/add', function () {
$minutes = 24 * 60;
//return response('歡迎來到 Laravel 學院')->cookie('name', '學院君', $minutes);
$cookie = cookie('name', '學院君X', $minutes);
return response('歡迎來到 Laravel 學院')->cookie($cookie);
});
效果和之前一致,這次訪問 cookie/get 路由,頁面打印結果是 學院君X。