首页 > 上网技巧 > 电脑小技巧 > 微信小程序使用Laravel的SESSION

微信小程序使用Laravel的SESSION

时间:2017-12-28 16:06 作者:QQ地带 我要评论

现在我们有一个很现实的问题,小程序的数据存储必须通过你自己服务器的HTTPS的接口存储到你自己的服务器(基于HTTPS的第三方服务器API,下面统称第三方接口)上面,但是小程序不支持cookie,这就意味着服务器不能识别每一个客户端,SESSION也随之失效。
 
也就是说,用户登陆小程序通过第三方接口将资料提交之后,即使第三方接口在服务器端配置了SESSION,也是没有用的,因为服务器的SESSION是通过用户提交的时候头部(header)携带的PHPSESSID来区分用户的,而PHPSESSID是存储在cookie里面的。
 
小程序不支持cookie,就必须找一个途径来解决这个问题。官方API文档给出了一个说明:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxchecksessionobject,通过第三方接口将sessionid(PHPSESSID)传给小程序客户端(一般会包含在header里面的Set-Cookie里面),然后使用wx.setStorageSync()存储到本地,然后每次发起请求(wx.request)的时候,将这个sessionid,放在header的Cookie里面提交给第三方接口。
 
Laravel的实现
 
在Laravel中,抛弃了PHP原生的SESSION,也就没有PHPSESSID,不过取而代之Laravel使用了一个等同的变量laravel_session。
 
所以当你在小程序登陆后,使用wx.request请求第三方接口让第三方服务器获取登陆登陆状态之后,第三方接口在返回的Response Header里面会有一个Set-Cookie值,里面包含了laravel_session,你可以使用正则表达获取(res.header[“Set-Cookie”].match(/laravel_session=(.*?);/)[1])到laravel_session然后存储到本地。然后在以后的每次wx.request请求里面都添加header,携带参数laravel_session=”你存储的值”。
 
这样就解决了小程序使用第三方接口的登陆问题。
 
有人说,同一个session的路由要放在同一个路由group里面:
 
Route::group(['middleware' => ['web']], function(){
  Route::any('login', 'LoginController@login');
  Route::get('account/info', 'AccountController@info');  
});
我是用的是Laravel 5.4,好像没有这个问题。

标签: 微信小程序
顶一下
(0)
0%
踩一下
(0)
0%

Google提供的广告