laravel 小程序登錄 session問題

問題描述

當(dāng)微信小程序開發(fā)中用laravel做后臺(tái)的時(shí)候一定會(huì)遇到登錄session的問題

因?yàn)樾〕绦驔]有cookie,所以每一次請求的時(shí)候,相當(dāng)于關(guān)閉瀏覽器,重新打開瀏覽器請求,服務(wù)器會(huì)重新生成一條session。php的有自己的session回收機(jī)制,但是laravel并沒有用PHP的session那套,而是有一套自己的session機(jī)制。本人是用的redis存儲(chǔ)session,這相當(dāng)于每次請求的時(shí)候都在redis中新生成一條記錄,當(dāng)訪問量特別大的時(shí)候,請求比較多,而設(shè)置的session時(shí)間又很長的時(shí)候這個(gè)時(shí)候可能導(dǎo)致redis撐爆,要保證session不重新生成,網(wǎng)上有介紹很多辦法,可以直接用別人針對微信登錄的vendor包,也可以自己動(dòng)手。

解決辦法

  1. 小程序重新封裝一個(gè)http請求,將cookie放在header頭中,每次請求帶上cookie
function Http({
  url,
  data,
  success,
  fail,
  complete,
  method = "POST"
}) {

  var session_id = wx.getStorageSync('PHPSESSID'); //本地取存儲(chǔ)的sessionID
  if (session_id != "" && session_id != null) {
    var header = {
      'content-type': 'application/x-www-form-urlencoded',
      'Cookie': 'skey=' + session_id
    }
  } else {
    var header = {
      'content-type': 'application/x-www-form-urlencoded'
    }
  }
  wx.request({
    url: url,
    method: method,
    data: data,
    header: header,
    success: res => {
      console.log(res);
      if (session_id == "" || session_id == null) {
        wx.setStorageSync('PHPSESSID', res.data.session_id) //如果本地沒有就說明第一次請求 把返回的session id 存入本地
      }
      let data = res.data
      res['statusCode'] === 200 ? success(data) : fail(res)
    },
    fail: fail,
    complete: complete
  })
}

2.修改laravel的env配置加上
SESSION_COOKIE=skey
3.關(guān)鍵的一點(diǎn)就是在Illuminate\Session\Middleware\StartSession中g(shù)etSession中通過cookie獲取cookie值的時(shí)候,居然沒有獲取到,而普通瀏覽器請求可以獲取到,這里面的laravel機(jī)制沒有追到,所以之后修改vendor代碼如下,直接使用php的$_COOKIE獲取

public function getSession(Request $request)
    {
        return tap($this->manager->driver(), function ($session) use ($request) {
            $cookie_name = $session->getName();
            $sesssion_id = isset($_COOKIE[$cookie_name]) ? $_COOKIE[$cookie_name] : '';
            $session->setId($sesssion_id);
            // $session->setId($request->cookies->get($session->getName()));
        });
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目錄Cookie機(jī)制什么是CookieCookie的不可跨域名性Unicode編碼:保存中文BASE64編碼:保存...
    Tomatoro閱讀 17,042評論 7 186
  • 會(huì)話(Session)跟蹤是Web程序中常用的技術(shù),用來跟蹤用戶的整個(gè)會(huì)話。常用的會(huì)話跟蹤技術(shù)是Cookie與Se...
    chinariver閱讀 5,784評論 1 49
  • Laravel 學(xué)習(xí)交流 QQ 群:375462817 本文檔前言Laravel 文檔寫的很好,只是新手看起來會(huì)有...
    Leonzai閱讀 8,713評論 2 12
  • 1 天氣就如孩子的脾氣,有時(shí)莫名暴躁。端午假期,格外燥熱。在不該熱的日子里,氣溫高達(dá)37°,扼殺我外出的想法。假期...
    雙人魚莉閱讀 743評論 4 31
  • 嚴(yán)歌苓說:“靠父母,你可以變成公主;靠男人;你可以成為皇后,只有靠自己,你才可以成為女王?!彼宰鳛榕?,一定要學(xué)...
    羽一教育肖莉麗閱讀 628評論 0 0

友情鏈接更多精彩內(nèi)容