文章

[延伸創作] 深入 Session 與 Cookie:Laravel 的實作

圖片
前言看到 Huli 寫了這篇 深入 Session 與 Cookie:Express、PHP 與 Rails 的實作,想說既然都寫到了 PHP 和 Rails 了,身為 PHP 版 Rails 的 Laravel 怎麼可以缺席呢 (?),所以就也來追追看原始碼吧!原本想在短時間內就把這篇發出去的,趁著風潮嘛。結果 Laravel 原始碼果然很難追,Laravel 5.8 版原始碼追著追著 Laravel 6.x 就推出了,擺著擺著 7.x 版又… 🤦‍♂️,就這樣過了八個多月,看來有得改了,還好差異不大。那我們就開始吧!TL;DR可以直接滑最後看結論 😭前言TL;DR本篇閱讀指南Laravel Framework(以 v7.9.2 版為例)Laravel 怎麼生成 Session ID 的「重新生成 Session ID」建立 Session IDLaravel 並不是使用 PHP 原生的 session 機制將 Session Information 寫進 File從 Laravel 儲存 Session 的指令下手Driver:儲存 Session 的管道Session 的 Service ProviderStartSession 是個 MiddlewaresaveSession():儲存 Session 資料SessionManagerManager::driver():取得 Driver InstancecreateFileDriver():建立 File Session Driver 的 InstancebuildSession(): 建立 Session InstanceStore:Session Instance 本體return 再 return:回到 saveSession()save(): 儲存 Session 資料到指定儲存空間(File)write():寫入 Session 資料到 File分岔一下,來講 File Facade回來 write():繼續寫入 Session 資料到 Fileput():把內容寫入檔案延伸討論:說好的 cookie-based session 呢createCookieDriver():建立 Cookie Session Driver 的 Instance驚喜地發現,中間流程都一樣!save(): 儲存 …