Laravel 8 實(shí)現(xiàn)驅(qū)動(dòng)

2021-06-25 11:09 更新

你自定義的 Session 驅(qū)動(dòng)必須實(shí)現(xiàn) SessionHandlerInterface 接口。這個(gè)接口包含了一些我們需要實(shí)現(xiàn)的簡(jiǎn)單方法。下面是 MongoDB 實(shí)現(xiàn)的大概流程示例:

<?php

namespace App\Extensions;

class MongoSessionHandler implements \SessionHandlerInterface
{
    public function open($savePath, $sessionName) {}
    public function close() {}
    public function read($sessionId) {}
    public function write($sessionId, $data) {}
    public function destroy($sessionId) {}
    public function gc($lifetime) {}
}

技巧:Laravel 默認(rèn)沒(méi)有附帶一個(gè)用于包擴(kuò)展的目錄,你可以把它放在你喜歡的目錄內(nèi)。在上面這個(gè)例子中,我們創(chuàng)建了一個(gè) Extensions 目錄用于存放 MongoSessionHandler。

由于以上方法并不是很容易理解,所以我們接下來(lái)每一個(gè)方法快速過(guò)一遍:

  • open 方法通常用于基于文件的 Session 存儲(chǔ)系統(tǒng)。因?yàn)?Laravel 已經(jīng)附帶了一個(gè) file Session 驅(qū)動(dòng)。所以你不需要在該方法中放置任何代碼。PHP 要求必須要有這個(gè)方法的實(shí)現(xiàn)(這只是一個(gè)糟糕的接口設(shè)計(jì)),你只需要把這個(gè)方法置空。
  • close 方法跟 open 方法相似,通常也可以被忽略。對(duì)大多數(shù)的驅(qū)動(dòng)而言,此方法不是必須的。
  • read 方法應(yīng)當(dāng)返回與給定的 $sessionId 相匹配的 Session 數(shù)據(jù)的字符串格式。在你的自定義的驅(qū)動(dòng)中獲取或存儲(chǔ) Session 數(shù)據(jù)時(shí),不需要進(jìn)行任何序列化或者其他編碼,因?yàn)?Laravel 會(huì)自動(dòng)為你執(zhí)行序列化。
  • write 方法將與 $sessionId 關(guān)聯(lián)的給定的 $data 字符串寫入到一些持久化存儲(chǔ)系統(tǒng),如 MongoDB、Dynamo 等。再次重申,你不需要進(jìn)行任何序列化或其他編碼,因?yàn)?Laravel 會(huì)自動(dòng)為你處理這些事情。
  • destroy 方法將會(huì)從持久化存儲(chǔ)中刪除與 $sessionId 相關(guān)的數(shù)據(jù)。
  • gc 方法能銷毀給定的 $lifetime(UNIX 的時(shí)間戳)之前的所有數(shù)據(jù)。對(duì)本身?yè)碛羞^(guò)期機(jī)制的系統(tǒng)如 Memcached 和 Redis 而言,該方法可以置空。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)