• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • mod_session_dbd

    描述:DBD/SQL 基于 session 支持
    状态:延期
    模块标识符:session_dbd_module
    源文件:mod_session_dbd.c
    兼容性:可在 Apache 2.3 及更高版本中使用

    摘要

    警告

    session 模块使用 HTTP cookies,因此可能成为 Cross Site Scripting 攻击的受害者,或者将潜在的私人信息暴露给 clients。在服务器上启用 session 功能之前,请确保已考虑相关风险。

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

    会话可以是匿名,其中 session 由存储在 cookie 中的浏览器上的唯一 UUID string 键入,或每用户,其中 session 是针对登录用户的用户 ID 键入的。

    基于 SQL 的会话对浏览器是隐藏的,因此无需加密即可提供隐私措施。

    服务器场内的不同 Web 服务器可以选择共享数据库,从而彼此共享会话。

    有关 session 接口的更多详细信息,请参阅mod_session模块的文档。

    DBD Configuration

    在可以将mod_session_dbd模块配置为维护 session 之前,必须配置mod_dbd模块以使服务器可以使用各种数据库查询。

    要保持 session,选择现有的 session,更新现有的 session,插入新的 session,以及删除过期的或空的 session,需要四个查询。这些查询按照下面的 example 配置。

    Sample DBD configuration

    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 中的浏览器中。此方法类似于大多数 application 服务器用于 store session 信息的方法。

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

    基于 SQL 的匿名 session

    Session On
    SessionDBDCookieName session path=/
    

    有关如何将 session 配置为由 CGI application 读取和写入的更多示例,请参阅mod_session示例部分。

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

    每个用户会话

    每个用户会话根据成功通过身份验证的用户的用户名进行键控。它提供最大的隐私,因为在认证领域之外没有 session 的外部句柄。

    每个用户会话在正确配置的经过身份验证的环境中工作,使用基本身份验证,摘要式身份验证或 SSL client 证书。由于谁首先出现的限制,鸡肉或鸡蛋,每个用户会话不能用于从mod_auth_form等模块存储身份验证凭据。

    要创建一个简单的每用户 session 并将其存储在名为 apachesession 的 postgres 数据库 table 中,并将 session 键入 userid,请按如下方式配置 session:

    基于 SQL 的每个用户 session

    Session On
    SessionDBDPerUser On
    

    数据库管家

    在 time 期间,可以预期数据库开始累积过期的会话。此时,mod_session_dbd模块还无法自动处理 session 到期。

    警告

    管理员需要通过 cron 设置外部 process 来清除过期的会话。

    SessionDBDCookieName 指令

    描述:Name 和存储 session ID 的 RFC2109 cookie 的属性
    句法:SessionDBDCookieName name attributes
    默认:none
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_session_dbd

    SessionDBDCookieName指令指定符合 RFC2109 的 cookie 的 name 和可选属性,其中将存储 session ID。 RFC2109 cookies 使用Set-Cookie HTTP 标头设置。

    可以指定 cookie 属性的可选列表,如下面的 example 所示。这些属性按原样插入到 cookie 中,并且不由 Apache 解释。确保根据 cookie 规范正确定义属性。

    Cookie 有属性

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

    SessionDBDCookieName2 指令

    描述:Name 和存储 session ID 的 RFC2965 cookie 的属性
    句法:SessionDBDCookieName2 name attributes
    默认:none
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_session_dbd

    SessionDBDCookieName2指令指定符合 RFC2965 的 cookie 的 name 和可选属性,其中将存储 session ID。 RFC2965 cookies 使用Set-Cookie2 HTTP 标头设置。

    可以指定 cookie 属性的可选列表,如下面的 example 所示。这些属性按原样插入到 cookie 中,并且不由 Apache 解释。确保根据 cookie 规范正确定义属性。

    Cookie2 具有属性

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

    SessionDBDCookieRemove 指令

    描述:控制是否应从传入的 HTTP headers 中删除 session ID cookies
    句法:SessionDBDCookieRemove On\|Off
    默认:SessionDBDCookieRemove On
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_session_dbd

    SessionDBDCookieRemove flag 控制在请求处理期间是否将从 headers 中删除包含 session ID 的 cookies。

    在反向代理情况下,Apache 服务器充当后端源服务器的服务器前端,向后端显示 session ID cookie 的内容可能是潜在的隐私侵犯。设置为 on 时,session ID cookie 将从传入的 HTTP headers 中删除。

    SessionDBDDeleteLabel 指令

    描述:用于从数据库中删除会话的 SQL 查询
    句法:SessionDBDDeleteLabel label
    默认:SessionDBDDeleteLabel deletesession
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_session_dbd

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

    SessionDBDInsertLabel 指令

    描述:用于将会话插入数据库的 SQL 查询
    句法:SessionDBDInsertLabel label
    默认:SessionDBDInsertLabel insertsession
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_session_dbd

    SessionDBDInsertLabel指令设置用于加载 session 的默认 insert 查询标签。此标签必须先使用DBDPrepareSQL指令定义。

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

    SessionDBDPerUser 指令

    描述:启用每个用户 session
    句法:SessionDBDPerUser On\|Off
    默认:SessionDBDPerUser Off
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_session_dbd

    SessionDBDPerUser flag 允许每个用户使用 session 键入用户的登录名 name。如果用户未登录,则将忽略此指令。

    SessionDBDSelectLabel 指令

    描述:用于从数据库中选择会话的 SQL 查询
    句法:SessionDBDSelectLabel label
    默认:SessionDBDSelectLabel selectsession
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_session_dbd

    SessionDBDSelectLabel指令设置用于加载 session 的默认 select 查询标签。此标签必须先使用DBDPrepareSQL指令定义。

    SessionDBDUpdateLabel 指令

    描述:用于更新数据库中现有会话的 SQL 查询
    句法:SessionDBDUpdateLabel label
    默认:SessionDBDUpdateLabel updatesession
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_session_dbd

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

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

    上篇:mod_sessioncrypto

    下篇:mod_setenvif