Laravel RawCookie

介绍

这里介绍一下自己封装的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