laravel基礎--8.2 session、cookie

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。

 

發佈了76 篇原創文章 · 獲贊 5 · 訪問量 9229
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章