<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_session_dbd

可用语言:  en  |  fr 

描述基于 DBD/SQL 的会话支持
状态扩展
模块标识符session_dbd_module
源文件mod_session_dbd.c
兼容性在 Apache 2.3 及更高版本中可用

摘要

警告

会话模块使用 HTTP cookie,因此可能成为跨站点脚本攻击的受害者,或将潜在的私密信息暴露给客户端。在您的服务器上启用会话功能之前,请确保已考虑相关风险。

mod_session 的子模块提供对使用 mod_dbd 模块在 SQL 数据库中存储用户会话的支持。

会话可以是**匿名**的,其中会话由存储在浏览器 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 指令

描述存储会话 ID 的 RFC2109 cookie 的名称和属性
语法SessionDBDCookieName name attributes
默认值
上下文服务器配置、虚拟主机、目录、.htaccess
状态扩展
模块mod_session_dbd

SessionDBDCookieName 指令指定存储会话 ID 的符合 RFC2109 的 cookie 的名称和可选属性。RFC2109 cookie 使用 Set-Cookie HTTP 标头设置。

可以指定可选的 cookie 属性列表,如下例所示。这些属性按原样插入 cookie 中,不会被 Apache 解释。确保您的属性根据 cookie 规范正确定义。

带属性的 cookie

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

SessionDBDCookieName2 指令

描述存储会话 ID 的 RFC2965 cookie 的名称和属性
语法SessionDBDCookieName2 name attributes
默认值
上下文服务器配置、虚拟主机、目录、.htaccess
状态扩展
模块mod_session_dbd

SessionDBDCookieName2 指令指定存储会话 ID 的符合 RFC2965 的 cookie 的名称和可选属性。RFC2965 cookie 使用 Set-Cookie2 HTTP 标头设置。

可以指定可选的 cookie 属性列表,如下例所示。这些属性按原样插入 cookie 中,不会被 Apache 解释。确保您的属性根据 cookie 规范正确定义。

带属性的 Cookie2

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

SessionDBDCookieRemove 指令

描述控制是否应从传入的 HTTP 标头中删除会话 ID cookie
语法SessionDBDCookieRemove On|Off
默认值SessionDBDCookieRemove On
上下文服务器配置、虚拟主机、目录、.htaccess
状态扩展
模块mod_session_dbd

SessionDBDCookieRemove 标志控制在请求处理期间是否从标头中删除包含会话 ID 的 cookie。

在 Apache 服务器充当后端源服务器的服务器前端的反向代理情况下,将会话 ID cookie 的内容泄露给后端可能会造成潜在的隐私泄露。当设置为 on 时,会话 ID cookie 将从传入的 HTTP 标头中删除。

top

SessionDBDDeleteLabel 指令

描述用于从数据库中删除会话的 SQL 查询
语法SessionDBDDeleteLabel label
默认值SessionDBDDeleteLabel deletesession
上下文服务器配置、虚拟主机、目录、.htaccess
状态扩展
模块mod_session_dbd

SessionDBDDeleteLabel 指令设置用于删除已过期或空的会话的默认删除查询标签。此标签必须使用 DBDPrepareSQL 指令预先定义。

top

SessionDBDInsertLabel 指令

描述用于将会话插入数据库的 SQL 查询
语法SessionDBDInsertLabel label
默认值SessionDBDInsertLabel insertsession
上下文服务器配置、虚拟主机、目录、.htaccess
状态扩展
模块mod_session_dbd

SessionDBDInsertLabel 指令设置用于加载会话的默认插入查询标签。此标签必须使用 DBDPrepareSQL 指令预先定义。

如果尝试更新会话影响的行数为零,则将调用此查询将会话插入数据库。

top

SessionDBDPerUser 指令

描述启用按用户会话
语法SessionDBDPerUser On|Off
默认值SessionDBDPerUser Off
上下文服务器配置、虚拟主机、目录、.htaccess
状态扩展
模块mod_session_dbd

SessionDBDPerUser 标志启用使用用户的登录名作为键的按用户会话。如果用户未登录,则将忽略此指令。

top

SessionDBDSelectLabel 指令

描述用于从数据库中选择会话的 SQL 查询
语法SessionDBDSelectLabel label
默认值SessionDBDSelectLabel selectsession
上下文服务器配置、虚拟主机、目录、.htaccess
状态扩展
模块mod_session_dbd

SessionDBDSelectLabel 指令设置用于加载会话的默认选择查询标签。此标签必须使用 DBDPrepareSQL 指令预先定义。

top

SessionDBDUpdateLabel 指令

描述用于更新数据库中现有会话的 SQL 查询
语法SessionDBDUpdateLabel label
默认值SessionDBDUpdateLabel updatesession
上下文服务器配置、虚拟主机、目录、.htaccess
状态扩展
模块mod_session_dbd

SessionDBDUpdateLabel 指令设置用于加载会话的默认更新查询标签。此标签必须使用 DBDPrepareSQL 指令预先定义。

如果尝试更新会话影响的行数为零,则将调用插入查询将会话插入数据库。如果数据库支持 InsertOrUpdate,请覆盖此查询以在一个查询中执行更新,而不是两个查询。

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果这些建议已实施或被认为无效/与主题无关,则可能会被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上),或发送到我们的 邮件列表