描述: | 基于DBD / SQL的会话支持 |
---|---|
状态: | 延期 |
模块标识符: | session_dbd_module |
源文件: | mod_session_dbd.c |
兼容性: | 在Apache 2.3及更高版本中可用 |
会话模块使用HTTP cookie,因此可能成为跨站点脚本攻击的受害者,或向客户端公开潜在的私人信息。在服务器上启用会话功能之前,请确保已考虑到相关风险。
该子模块mod_session
提供使用该mod_dbd
模块在SQL数据库中存储用户会话的支持
。
会话可以是匿名的(使用存储在浏览器中Cookie中的唯一UUID字符串作为会话的密钥), 也可以是每个用户(根据已登录用户的userid来作为会话的密钥)。
基于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数据库表中,并将该会话键入用户标识,请按以下方式配置该会话:
Session On SessionDBDPerUser On
描述: | 存储会话ID的RFC2109 cookie的名称和属性 |
---|---|
句法: | SessionDBDCookieName name attributes |
默认: | none |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
状态: | 延期 |
模块: | mod_session_dbd |
该SessionDBDCookieName
指令指定的名称和RFC2109兼容的cookie里面的会话ID将被存储其中的可选属性。RFC2109 cookie是使用Set-Cookie
HTTP标头设置的。
可以按照以下示例指定cookie属性的可选列表。这些属性将按原样插入Cookie中,并且Apache不会对其进行解释。确保根据cookie规范正确定义了属性。
Session On SessionDBDCookieName session path=/private;domain=example.com;httponly;secure;version=1;
描述: | 存储会话ID的RFC2965 cookie的名称和属性 |
---|---|
句法: | SessionDBDCookieName2 name attributes |
默认: | none |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
状态: | 延期 |
模块: | mod_session_dbd |
该SessionDBDCookieName2
指令指定的名称和RFC2965兼容的cookie里面的会话ID将被存储其中的可选属性。RFC2965 cookie是使用Set-Cookie2
HTTP标头设置的。
可以按照以下示例指定cookie属性的可选列表。这些属性将按原样插入Cookie中,并且Apache不会对其进行解释。确保根据cookie规范正确定义了属性。
Session On SessionDBDCookieName2 session path=/private;domain=example.com;httponly;secure;version=1;
描述: | 控制是否应从传入的HTTP标头中删除会话ID cookie |
---|---|
句法: | SessionDBDCookieRemove On|Off |
默认: | SessionDBDCookieRemove On |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
状态: | 延期 |
模块: | mod_session_dbd |
该SessionDBDCookieRemove
标志控制在请求处理期间是否将从标题中删除包含会话ID的cookie。
在反向代理的情况下,Apache服务器充当后端原始服务器的服务器前端,将会话ID cookie的内容透露给后端可能会潜在地侵犯隐私。设置为on时,会话ID cookie将从传入的HTTP标头中删除。
描述: | 用于从数据库中删除会话的SQL查询 |
---|---|
句法: | SessionDBDDeleteLabel label |
默认: | SessionDBDDeleteLabel deletesession |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
状态: | 延期 |
模块: | mod_session_dbd |
在SessionDBDDeleteLabel
使用指令集的默认删除查询标签,删除过期或空会话。此标签必须先前已使用DBDPrepareSQL
指令定义。
描述: | 用于将会话插入数据库的SQL查询 |
---|---|
句法: | SessionDBDInsertLabel label |
默认: | SessionDBDInsertLabel insertsession |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
状态: | 延期 |
模块: | mod_session_dbd |
该SessionDBDInsertLabel
指令集的默认插入查询标签,可用于负载的会话。此标签必须先前已使用DBDPrepareSQL
指令定义
。
如果尝试更新会话不影响任何行,则将调用此查询以将会话插入数据库。
描述: | 启用每个用户会话 |
---|---|
句法: | SessionDBDPerUser On|Off |
默认: | SessionDBDPerUser Off |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
状态: | 延期 |
模块: | mod_session_dbd |
该SessionDBDPerUser
标志启用针对每个用户会话的用户登录名。如果用户未登录,则该指令将被忽略。
描述: | 用于从数据库中选择会话的SQL查询 |
---|---|
句法: | SessionDBDSelectLabel label |
默认: | SessionDBDSelectLabel selectsession |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
状态: | 延期 |
模块: | mod_session_dbd |
该SessionDBDSelectLabel
指令设置用于在会话中加载的默认选择查询标签。此标签必须先前已使用DBDPrepareSQL
指令定义
。
描述: | 用于更新数据库中现有会话的SQL查询 |
---|---|
句法: | SessionDBDUpdateLabel label |
默认: | SessionDBDUpdateLabel updatesession |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
状态: | 延期 |
模块: | mod_session_dbd |
该SessionDBDUpdateLabel
指令集的默认更新查询标签,可用于负载的会话。此标签必须先前已使用DBDPrepareSQL
指令定义
。
如果尝试更新会话不影响任何行,则将调用插入查询以将会话插入数据库。如果数据库支持InsertOrUpdate,请覆盖此查询以在一个查询而不是两个查询中执行更新。