Apache HTTP Server 版本 2.4
說明 | 基於 DBD/SQL 的工作階段支援 |
---|---|
狀態 | 擴充功能 |
模組識別碼 | session_dbd_module |
來源檔案 | mod_session_dbd.c |
相容性 | 適用於 Apache 2.3 和後續版本 |
工作階段模組使用 HTTP Cookie,因此可能會發生跨網站腳本攻擊,或對用戶公開可能屬於私密的資訊。在您的伺服器上啟用工作階段功能之前,請務必考慮相關風險。
的這個次模組提供支援,可用於將使用者工作階段儲存在 SQL 資料庫中,並使用 mod_session
模組。mod_dbd
工作階段可以是**匿名**的,也就是工作階段鎖定瀏覽器中 Cookie 儲存的唯一 UUID 字串,也可以**針對單一使用者**,也就是工作階段鎖定已登入使用者的使用者 ID。
基於 SQL 的工作階段,瀏覽器無法存取,因此無需加密就能達到一定程度的隱私保護。
伺服器區中的不同 Web 伺服器可以選擇共用資料庫,並彼此共用工作階段。
有關工作階段介面的詳細資訊,請參閱
模組文件。mod_session
在 mod_session_dbd
模組組態維護階段之前,mod_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
匿名階段是針對唯一的 UUID 進行金鑰化,儲存在 HTTP cookie 中的瀏覽器當中。此方法類似於大多數應用程式伺服器用來儲存階段資訊的方法。
若要建立一個簡單的匿名階段,並將它儲存在稱為 apachesession 的 postgres 資料庫資料表中,並將階段 ID 儲存在稱為 session 的 cookie,請依下列方式組態階段
Session On SessionDBDCookieName session path=/
有關如何在 CGI 應用程式中讀取和寫入階段組態,請參閱 mod_session
範例區段。
有關如何使用階段儲存使用者名稱和密碼詳細資料的說明,請參閱 mod_auth_form
模組。
每個使用階段都針對已成功驗證使用者的使用者名稱進行金鑰化。它提供最大的隱私,因為沒有外部的階段處理程序存在於驗證範疇之外。
每個使用者階段,都在正確組態的驗證環境中運作,不論是使用基本的驗證、摘要驗證,還是 SSL 憑證。由於先天限制,就是雞生蛋還是蛋生雞,每個使用者階段無法用來儲存來自類似 mod_auth_form
模組的驗證認證資料。
若要建立一個簡單的每個使用者階段,並將它儲存在稱為 apachesession 的 postgres 資料庫資料表中,而且階段的金鑰是使用者的 ID,請依下列方式組態階段
Session On SessionDBDPerUser On
說明 | RFC2109 cookie 的名稱和屬性,用來儲存階段 ID |
---|---|
語法 | SessionDBDCookieName name attributes |
預設 | none |
內容 | 伺服器設定、虛擬主機、目錄、.htaccess |
狀態 | 擴充功能 |
模組 | mod_session_dbd |
可指定選項的 Cookie 屬性清單,如下例所示。這些屬性將原樣插入到 Cookie,Apache 也不會對它們進行詮釋。請務必按照 Cookie 規範正確地定義屬性。
Session On SessionDBDCookieName session path=/private;domain=example.com;httponly;secure;version=1;
說明 | 儲存暫存 ID 的 RFC2965 Cookie 名稱和屬性 |
---|---|
語法 | SessionDBDCookieName2 名稱 屬性 |
預設 | none |
內容 | 伺服器設定、虛擬主機、目錄、.htaccess |
狀態 | 擴充功能 |
模組 | mod_session_dbd |
可指定選項的 Cookie 屬性清單,如下例所示。這些屬性將原樣插入到 Cookie,Apache 也不會對它們進行詮釋。請務必按照 Cookie 規範正確地定義屬性。
Session On SessionDBDCookieName2 session path=/private;domain=example.com;httponly;secure;version=1;
說明 | 控制是否應從輸入的 HTTP 標頭移除暫存 ID Cookie |
---|---|
語法 | SessionDBDCookieRemove 開啟|關閉 |
預設 | SessionDBDCookieRemove 開啟 |
內容 | 伺服器設定、虛擬主機、目錄、.htaccess |
狀態 | 擴充功能 |
模組 | mod_session_dbd |
在 Apache 伺服器充當後端原始伺服器的伺服器前端的反向代理情況下,向後端揭露暫存 ID Cookie 的內容可能會導致隱私權遭到侵犯。設定為開啟時,暫存 ID Cookie 將從輸入的 HTTP 標頭移除。
說明 | 用於從資料庫移除暫存的 SQL 查詢 |
---|---|
語法 | SessionDBDDeleteLabel 標籤 |
預設 | SessionDBDDeleteLabel deletesession |
內容 | 伺服器設定、虛擬主機、目錄、.htaccess |
狀態 | 擴充功能 |
模組 | mod_session_dbd |
說明 | 用於將暫存插入資料庫的 SQL 查詢 |
---|---|
語法 | SessionDBDInsertLabel 標籤 |
預設 | SessionDBDInsertLabel insertsession |
內容 | 伺服器設定、虛擬主機、目錄、.htaccess |
狀態 | 擴充功能 |
模組 | mod_session_dbd |
如果更新會話的嘗試沒有影響任何列,會呼叫此查詢以將會話插入資料庫。
說明 | 啟用每個使用者會話 |
---|---|
語法 | SessionDBDPerUser 開|關 |
預設 | SessionDBDPerUser 關 |
內容 | 伺服器設定、虛擬主機、目錄、.htaccess |
狀態 | 擴充功能 |
模組 | mod_session_dbd |
SessionDBDPerUser
旗標會根據使用者的登入名稱啟用每個使用者的會話。如果使用者未登入,會略過此指令。
說明 | 可從資料庫中選取會話的 SQL 查詢 |
---|---|
語法 | SessionDBDSelectLabel 標籤 |
預設 | SessionDBDSelectLabel selectsession |
內容 | 伺服器設定、虛擬主機、目錄、.htaccess |
狀態 | 擴充功能 |
模組 | mod_session_dbd |
SessionDBDSelectLabel
指令設定預設選取查詢標籤,用來載入會話。此標籤必須先使用 DBDPrepareSQL
指令加以定義。
說明 | 可更新資料庫中既有會話的 SQL 查詢 |
---|---|
語法 | SessionDBDUpdateLabel 標籤 |
預設 | SessionDBDUpdateLabel updatesession |
內容 | 伺服器設定、虛擬主機、目錄、.htaccess |
狀態 | 擴充功能 |
模組 | mod_session_dbd |
SessionDBDUpdateLabel
指令設定預設更新查詢標籤,用來載入會話。此標籤必須先使用 DBDPrepareSQL
指令加以定義。
如果更新會話的嘗試沒有影響任何列,會呼叫插入查詢以將會話插入資料庫。如果資料庫支援 InsertOrUpdate,請覆寫此查詢以將更新納入一個查詢中,而非兩個查詢。