<-
Apache HTTP 服务器 2.4 > Apache模块mod_session_dbd

Apache模块mod_session_dbd

描述:基于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模块的文档。

支持Apache!

主题

指令

错误修正清单

也可以看看

最佳

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
最佳

匿名会话

匿名会话针对唯一的UUID进行键控,并存储在浏览器中的HTTP cookie中。此方法类似于大多数应用程序服务器用于存储会话信息的方法。

要创建一个简单的匿名会话并将其存储在名为apachesession的postgres数据库表中,并将会话ID保存在名为session的cookie中,请按以下方式配置会话:

基于SQL的匿名会话

Session On
SessionDBDCookieName session path=/

有关如何配置会话以从CGI应用程序读取和写入会话的更多示例,请参见 mod_session示例部分。

有关如何使用会话存储用户名和密码详细信息的文档,请参阅mod_auth_form模块。

最佳

每用户会话

每个用户会话均针对成功通过身份验证的用户的用户名进行锁定。它提供了最大的隐私性,因为在已认证的领域之外不存在会话的外部句柄。

每个用户会话都在正确配置的身份验证环境中工作,无论是使用基本身份验证,摘要身份验证还是SSL客户端证书。由于先到先得的限制(鸡肉或鸡蛋),每个用户会话不能用于存储来自的模块的身份验证凭据 mod_auth_form

要创建一个简单的每用户会话并将其存储在名为apachesession的postgres数据库表中,并将该会话键入用户标识,请按以下方式配置该会话:

每个用户会话基于SQL

Session On
SessionDBDPerUser On
最佳

数据库整理

随着时间的流逝,可以期望数据库开始累积过期的会话。此时,该mod_session_dbd模块尚不能自动处理会话到期。

警告

管理员将需要通过cron设置外部进程,以清除过期的会话。

最佳

SessionDBDCookieName 指令

描述:存储会话ID的RFC2109 cookie的名称和属性
句法:SessionDBDCookieName name attributes
默认:none
内容:服务器配置,虚拟主机,目录,.htaccess
状态:延期
模块:mod_session_dbd

SessionDBDCookieName指令指定的名称和RFC2109兼容的cookie里面的会话ID将被存储其中的可选属性。RFC2109 cookie是使用Set-CookieHTTP标头设置的。

可以按照以下示例指定cookie属性的可选列表。这些属性将按原样插入Cookie中,并且Apache不会对其进行解释。确保根据cookie规范正确定义了属性。

具有属性的Cookie

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

SessionDBDCookieName2 指令

描述:存储会话ID的RFC2965 cookie的名称和属性
句法:SessionDBDCookieName2 name attributes
默认:none
内容:服务器配置,虚拟主机,目录,.htaccess
状态:延期
模块:mod_session_dbd

SessionDBDCookieName2指令指定的名称和RFC2965兼容的cookie里面的会话ID将被存储其中的可选属性。RFC2965 cookie是使用Set-Cookie2HTTP标头设置的。

可以按照以下示例指定cookie属性的可选列表。这些属性将按原样插入Cookie中,并且Apache不会对其进行解释。确保根据cookie规范正确定义了属性。

具有属性的Cookie2

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

SessionDBDCookie删除 指令

描述:控制是否应从传入的HTTP标头中删除会话ID cookie
句法:SessionDBDCookieRemove On|Off
默认:SessionDBDCookieRemove On
内容:服务器配置,虚拟主机,目录,.htaccess
状态:延期
模块:mod_session_dbd

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

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

最佳

SessionDBDDeleteLabel 指令

描述:用于从数据库中删除会话的SQL查询
句法:SessionDBDDeleteLabel label
默认:SessionDBDDeleteLabel deletesession
内容:服务器配置,虚拟主机,目录,.htaccess
状态:延期
模块:mod_session_dbd

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

最佳

SessionDBDInsertLabel 指令

描述:用于将会话插入数据库的SQL查询
句法:SessionDBDInsertLabel label
默认:SessionDBDInsertLabel insertsession
内容:服务器配置,虚拟主机,目录,.htaccess
状态:延期
模块:mod_session_dbd

SessionDBDInsertLabel指令集的默认插入查询标签,可用于负载的会话。此标签必须先前已使用DBDPrepareSQL指令定义 。

如果尝试更新会话不影响任何行,则将调用此查询以将会话插入数据库。

最佳

SessionDBDPerUser 指令

描述:启用每个用户会话
句法:SessionDBDPerUser On|Off
默认:SessionDBDPerUser Off
内容:服务器配置,虚拟主机,目录,.htaccess
状态:延期
模块:mod_session_dbd

SessionDBDPerUser标志启用针对每个用户会话的用户登录名。如果用户未登录,则该指令将被忽略。

最佳

SessionDBDSelectLabel 指令

描述:用于从数据库中选择会话的SQL查询
句法:SessionDBDSelectLabel label
默认:SessionDBDSelectLabel selectsession
内容:服务器配置,虚拟主机,目录,.htaccess
状态:延期
模块:mod_session_dbd

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

最佳

SessionDBDUpdateLabel 指令

描述:用于更新数据库中现有会话的SQL查询
句法:SessionDBDUpdateLabel label
默认:SessionDBDUpdateLabel updatesession
内容:服务器配置,虚拟主机,目录,.htaccess
状态:延期
模块:mod_session_dbd

SessionDBDUpdateLabel指令集的默认更新查询标签,可用于负载的会话。此标签必须先前已使用DBDPrepareSQL指令定义 。

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

可用语言: zh  |  fr 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。