[延伸創作] 深入 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 ID Laravel 並不是使用 PHP 原生的 session 機制 將 Session Information 寫進 File 從 Laravel 儲存 Session 的指令下手 Driver:儲存 Session 的管道 Session 的 Service Provider StartSession 是個 Middleware saveSession():儲存 Session 資料 SessionManager Manager::driver():取得 Driver Instance createFileDriver():建立 File Session Driver 的 Instance buildSession(): 建立 Session Instance Store:Session Instance 本體 return 再 return:回到 saveSession() save(): 儲存 Session 資料到指定儲存空間(File) write():寫入 Session 資料到 File 分岔一下,來講 File Facade 回來 write():繼續寫入 Session 資料到 File put():把內容寫入檔案 延伸討論:說好的 cookie-based session 呢 cr