当然这里我只是保存了$user_id,如果你需要更多信息可以考虑使用redis,memcached等进行长期缓存,反正每次产生的$session_key都是一样的。
Session_key使用例子
上面我们获取了session_key并在前后端进行了保存,接下来就是如何使用该session_key了。
后端验证
关于CommonContrller的原理请看之前的一篇博客:tp框架的RBAC实现
class CommonController extends Controller{ protected $user_id; public function ___initialize(){ // 对用户的session_key进行验证 $session_key=I("session_key"); $user_id=S($session_key); if(!$user_id){ // 该$session_key失效或者不合法 $this->ajaxReturn(array('result'=>"请退出小程序重新登录"));exit(); } $this->user_id=$user_id; } }
接着假设下面是你真正想要访问的方法
class IndexController extends CommonController{ public function(){ // 假设这里你需要获取当前用户的id,只需要直接调用父类中的属性就可以了 $user_id=$this->user_id; } }
上面我们就借用了我们生成的session_key配合上缓存模拟了session的验证机制,希望对你们有用。
前端实现
getData:function(){ // 从缓存中获取session_key,并将其传递给后端,做用户身份的确认 var session_key=wx.getStorageSync('session_key'); wx.request({ url:app.globalData.url+"/home/index/index?session_key="+session_key, success:function(res){ // } }) }
前置页面做优化
上面我们是在app.js的onLaunch中直接调用登录函数,但是这样却存在一个问题,那就是登录没有完成,就跳转到入口的page中,接着由于session_key还没有生成,导致页面数据请求失败。我当时就是遇到了这个问题,所以我把入口的page设置成了前置页面,并在前置页面中添加了下面的函数:
onLoad: function (options) { var time=setInterval(function(){ var session_key=wx.getStorageSync('session_key'); // 只有当session_key存在时,才跳转到首页去,保证请求数据的有效性,否则就在前置页面暂留一会 if(session_key.length>5){ wx.switchTab({ url:"/pages/index/index" }) clearInterval(time); } },1000); }