<-
Apache > HTTP Server > 文件 > 版本 2.4 > 模組

Apache 模組 mod_session_dbd

可用語言:  en  |  fr 

說明基於 DBD/SQL 的工作階段支援
狀態擴充功能
模組識別碼session_dbd_module
來源檔案mod_session_dbd.c
相容性適用於 Apache 2.3 和後續版本

摘要

警告

工作階段模組使用 HTTP Cookie,因此可能會發生跨網站腳本攻擊,或對用戶公開可能屬於私密的資訊。在您的伺服器上啟用工作階段功能之前,請務必考慮相關風險。

mod_session 的這個次模組提供支援,可用於將使用者工作階段儲存在 SQL 資料庫中,並使用 mod_dbd 模組。

工作階段可以是**匿名**的,也就是工作階段鎖定瀏覽器中 Cookie 儲存的唯一 UUID 字串,也可以**針對單一使用者**,也就是工作階段鎖定已登入使用者的使用者 ID。

基於 SQL 的工作階段,瀏覽器無法存取,因此無需加密就能達到一定程度的隱私保護。

伺服器區中的不同 Web 伺服器可以選擇共用資料庫,並彼此共用工作階段。

有關工作階段介面的詳細資訊,請參閱 mod_session 模組文件。

Support Apache!

主題

指令

錯誤修正清單

另請參閱

top

DBD 組態

mod_session_dbd 模組組態維護階段之前,mod_dbd 模組必須組態使伺服器可用各種資料庫查詢。

必須維護四大查詢,才能讓階段維持,它們是選取現有階段、更新現有階段、插入新階段和刪除過期或空的階段。這些查詢是根據下列範例組態。

範例 DBD 組態

DBDriver pgsql
DBDParams "dbname=apachesession user=apache password=xxxxx host=localhost"
DBDPrepareSQL "delete from session where key = %s" deletesession
DBDPrepareSQL "update session set value = %s, expiry = %lld, key = %s where key = %s" updatesession
DBDPrepareSQL "insert into session (value, expiry, key) values (%s, %lld, %s)" insertsession
DBDPrepareSQL "select value from session where key = %s and (expiry = 0 or expiry > %lld)" selectsession
DBDPrepareSQL "delete from session where expiry != 0 and expiry < %lld" cleansession
top

匿名階段

匿名階段是針對唯一的 UUID 進行金鑰化,儲存在 HTTP cookie 中的瀏覽器當中。此方法類似於大多數應用程式伺服器用來儲存階段資訊的方法。

若要建立一個簡單的匿名階段,並將它儲存在稱為 apachesession 的 postgres 資料庫資料表中,並將階段 ID 儲存在稱為 session 的 cookie,請依下列方式組態階段

以 SQL 為基礎的匿名階段

Session On
SessionDBDCookieName session path=/

有關如何在 CGI 應用程式中讀取和寫入階段組態,請參閱 mod_session 範例區段。

有關如何使用階段儲存使用者名稱和密碼詳細資料的說明,請參閱 mod_auth_form 模組。

top

每個使用者階段

每個使用階段都針對已成功驗證使用者的使用者名稱進行金鑰化。它提供最大的隱私,因為沒有外部的階段處理程序存在於驗證範疇之外。

每個使用者階段,都在正確組態的驗證環境中運作,不論是使用基本的驗證、摘要驗證,還是 SSL 憑證。由於先天限制,就是雞生蛋還是蛋生雞,每個使用者階段無法用來儲存來自類似 mod_auth_form 模組的驗證認證資料。

若要建立一個簡單的每個使用者階段,並將它儲存在稱為 apachesession 的 postgres 資料庫資料表中,而且階段的金鑰是使用者的 ID,請依下列方式組態階段

以 SQL 為基礎的每個使用者階段

Session On
SessionDBDPerUser On
top

資料庫維護

在很長一段時間,預期資料庫會開始累積過期階段。現階段,mod_session_dbd 模組還無法自動處理階段到期。

警告

管理員需要透過 cron 設定一個外部處理程序,來清除過期階段。

top

SessionDBDCookieName 指令

說明RFC2109 cookie 的名稱和屬性,用來儲存階段 ID
語法SessionDBDCookieName name attributes
預設none
內容伺服器設定、虛擬主機、目錄、.htaccess
狀態擴充功能
模組mod_session_dbd

可指定選項的 Cookie 屬性清單,如下例所示。這些屬性將原樣插入到 Cookie,Apache 也不會對它們進行詮釋。請務必按照 Cookie 規範正確地定義屬性。

具備屬性的 Cookie

Session On
SessionDBDCookieName session path=/private;domain=example.com;httponly;secure;version=1;
top

SessionDBDCookieName2 指令

說明儲存暫存 ID 的 RFC2965 Cookie 名稱和屬性
語法SessionDBDCookieName2 名稱 屬性
預設none
內容伺服器設定、虛擬主機、目錄、.htaccess
狀態擴充功能
模組mod_session_dbd

可指定選項的 Cookie 屬性清單,如下例所示。這些屬性將原樣插入到 Cookie,Apache 也不會對它們進行詮釋。請務必按照 Cookie 規範正確地定義屬性。

具備屬性的 Cookie2

Session On
SessionDBDCookieName2 session path=/private;domain=example.com;httponly;secure;version=1;
top

SessionDBDCookieRemove 指令

說明控制是否應從輸入的 HTTP 標頭移除暫存 ID Cookie
語法SessionDBDCookieRemove 開啟|關閉
預設SessionDBDCookieRemove 開啟
內容伺服器設定、虛擬主機、目錄、.htaccess
狀態擴充功能
模組mod_session_dbd

在 Apache 伺服器充當後端原始伺服器的伺服器前端的反向代理情況下,向後端揭露暫存 ID Cookie 的內容可能會導致隱私權遭到侵犯。設定為開啟時,暫存 ID Cookie 將從輸入的 HTTP 標頭移除。

top

SessionDBDDeleteLabel 指令

說明用於從資料庫移除暫存的 SQL 查詢
語法SessionDBDDeleteLabel 標籤
預設SessionDBDDeleteLabel deletesession
內容伺服器設定、虛擬主機、目錄、.htaccess
狀態擴充功能
模組mod_session_dbd

top

SessionDBDInsertLabel 指令

說明用於將暫存插入資料庫的 SQL 查詢
語法SessionDBDInsertLabel 標籤
預設SessionDBDInsertLabel insertsession
內容伺服器設定、虛擬主機、目錄、.htaccess
狀態擴充功能
模組mod_session_dbd

如果更新會話的嘗試沒有影響任何列,會呼叫此查詢以將會話插入資料庫。

top

SessionDBDPerUser 指令

說明啟用每個使用者會話
語法SessionDBDPerUser 開|關
預設SessionDBDPerUser 關
內容伺服器設定、虛擬主機、目錄、.htaccess
狀態擴充功能
模組mod_session_dbd

SessionDBDPerUser 旗標會根據使用者的登入名稱啟用每個使用者的會話。如果使用者未登入,會略過此指令。

top

SessionDBDSelectLabel 指令

說明可從資料庫中選取會話的 SQL 查詢
語法SessionDBDSelectLabel 標籤
預設SessionDBDSelectLabel selectsession
內容伺服器設定、虛擬主機、目錄、.htaccess
狀態擴充功能
模組mod_session_dbd

SessionDBDSelectLabel 指令設定預設選取查詢標籤,用來載入會話。此標籤必須先使用 DBDPrepareSQL 指令加以定義。

top

SessionDBDUpdateLabel 指令

說明可更新資料庫中既有會話的 SQL 查詢
語法SessionDBDUpdateLabel 標籤
預設SessionDBDUpdateLabel updatesession
內容伺服器設定、虛擬主機、目錄、.htaccess
狀態擴充功能
模組mod_session_dbd

SessionDBDUpdateLabel 指令設定預設更新查詢標籤,用來載入會話。此標籤必須先使用 DBDPrepareSQL 指令加以定義。

如果更新會話的嘗試沒有影響任何列,會呼叫插入查詢以將會話插入資料庫。如果資料庫支援 InsertOrUpdate,請覆寫此查詢以將更新納入一個查詢中,而非兩個查詢。

可用語言:  en  |  fr 

top

意見

注意
此處並非問答區。放置於此處的留言應針對改善文件或伺服器的建議,如果這些建議已被採用或被認為無效/與主題無關,我們的管理員可能會將其移除。關於如何管理 Apache HTTP Server 的問題應直接傳送至我們的 IRC 頻道 (位於 Libera.chat 上的 #httpd) 或傳送至我們的郵件列表