Laravel 探索之 Session 與 Cookie 結構

Redgo發表於2018-04-08

Session 的屬性及作用如下:

# sessionid, 要麼是從請求的 cookie 中獲取,要麼是生成的
protected $id;

# session的name,在配置檔案 session.php 中的 cookie item 決定
protected $name;

# 存放 session 資訊,其中鍵名為
#     flash.old  存放上一次請求儲存進 session 的 $attributes 中的 key
#     flash.new  存放  當前請求儲存進 session 的 $attributes 中的 key
#     _old_input 呼叫 flash() 存放當前請求的 input 陣列;在請求中呼叫 old() 可以獲取 session 中 __old_input 的鍵值對
protected $attributes = [];

# session 中的包集合, 關於包的這部分,用法不明
protected $bags = [];
# session start時會建立空包;儲存後設資料;
protected $metaBag;
# 儲存包名與 session 中相關資料的對應關係;
protected $bagData = [];

# 儲存 Session 資訊的驅動(例如:檔案或 Cache)
protected $handler;

# StartSession 中介軟體開始時設為 true, 處理完請求要返回的時候設為 false; 該狀態值,第三方庫獲取會用到
protected $started = false;

Cookie 模組有 EncryptCookies 中介軟體,用於解密請求中的 Cookies 資訊,在返回響應時會加密 Cookie 資訊;

請求攜帶的 cookie 儲存在 \Symfony\Component\HttpFoundation\ParameterBag 集合,不會原路返回新增響應;

Symfony\Component\HttpFoundation\Cookie 結構:

    # cookie 名稱
    protected $name;

    # cookie 值
    protected $value;

    # 指示 cookie 將要傳送到哪個域或那些域中。預設情況下,domain 會被設定為建立該 cookie 的頁面所在的域名。
    protected $domain;

    # 指定了cookie何時不會再被髮送到伺服器端的;該選項所對應的值是一個格式為Wdy,DD-Mon--YYYY HH:MM:SS GMT的值;沒有expires選項時,cookie的壽命僅限於單一的會話中。
    protected $expire;

    # 定義了Web伺服器上哪些路徑下的頁面可獲取伺服器設定的Cookie。
    protected $path;

    # 該選項只是一個標記並且沒有其它的值。一個secure cookie只有當請求是通過SSL和HTTPS建立時,才會傳送到伺服器端。用來標記是否是 https 請求
    protected $secure;

    # 一旦設定這個標記,通過documen.coookie則不能再訪問該cookie。
    protected $httpOnly;

相關文章