原文地址:http://blog.onlywan.cc/15009665805779.html
介紹
這裏介紹一下自己封裝的composer包,wan/raw-cookie。
主要作用是在laravel框架中使用setrawcookie設置cookie值。
優勢
大家可能比較困惑,php不是有原生的setrawcookie嗎,Laravel中也有Cookie操作類。這裏說明一下寫這個包的原因:
1.更加優雅
優雅的原因是什麼呢,因原生setcookie及setrawcookie設置後無法取消,對一些業務處理無法進行靈活的支持,這裏舉一個例子說明一下
比如登錄操作,登錄成功後,需要下發對應的cookie。這時,登錄接口添加了一個登錄風險檢查功能,就是判斷用戶登錄是否存在風險。如果存在風險,則相應的對用戶進行更嚴格的驗證。
方式兩種:
1. 登錄成功後,在代碼中添加風險檢測,如果檢測通過,下發cookie;不通過,不下發cookie,返回錯誤。
2. 做一個事後中間件,如果檢測到是登錄,進行登錄風險檢測,如果檢測通過,繼續返回;不通過,取消cookie下發,取消原響應值
分析兩種方式:
方式1優點:實現邏輯簡單;缺點:侵入到業務代碼邏輯中,需要對應修改維護業務流程
方式2優點:對業務代碼無侵入,業務代碼可以隨時修改自己邏輯而無需關注風險檢查調用時機的業務邏輯;缺點:對應實現複雜度會高一些,特別是風險檢測參數,需要自己從request及response中獲取。
這裏我們選擇了第二種方案。這裏就牽扯到下發cookie的取消。如果使用setcookie將cookie過期的話,在業務中設置的cookie在header中依然可以看到,先設置了cookie的值,然後對應把cookie值設置爲空,並過期,存在安全性問題。
使用RawCookie後,通過事後中間件,直到最後返回Response的時候,才真正的執行setcookie或setrawcookie,中間對於使用RawCookie::queue()方法添加的cookie,可以隨時刪除。
2.添加setrawcookie操作
Laravel 5.1及Laravel 5.2版本中,Cookie::queue方法,無法指定cookie的value值不做urlencode操作。
Laravel 5.3以後,Laravel自帶的Cookie已經支持該方法。因爲我們線上Laravel版本都是5.1,所以這裏自己封裝RawCookie,使其支持類似RawCookie::queue()操作,並添加raw參數,根據raw參數判斷,最終使用setcookie還是setrawcookie。
使用
使用composer require wan/raw-cookie安裝。
當前只支持Laravel框架,主要是對Laravel框架中的Cookie及CookieJar進行包裝。
具體集成見項目README
github地址:https://github.com/wanguowan/composer.RawCookie
歡迎添加公衆號: