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

Apache模块mod_session

描述:会话支持
状态:延期
模块标识符:session_module
源文件:mod_session.c
兼容性:在Apache 2.3及更高版本中可用

摘要

警告

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

该模块为每个用户会话界面的服务器范围提供支持。会话可用于跟踪用户是否已登录,或用于其他每个用户的信息,这些信息应在请求中保持可用。

会话可以存储在服务器上,也可以存储在浏览器上。会话也可以选择加密,以提高安全性。这些功能除了分为以下几个模块 mod_sessionmod_session_cryptomod_session_cookiemod_session_dbd。根据服务器要求,将适当的模块加载到服务器中(在编译时静态地或通过LoadModule伪指令动态地)。

可以从依赖于该会话的其他模块中操纵会话,或者可以根据需要使用环境变量和HTTP标头从中读取会话或将会话写入会话。

支持Apache!

主题

指令

错误修正清单

也可以看看

最佳

什么是会议?

会话界面的核心是一个键和值对表,可以跨浏览器请求进行访问。根据应用程序使用会话的需要,可以将这些对设置为任何有效的字符串。

“会话”是 包含HTML规范定义的这些键值对的application / x-www-form-urlencoded字符串 。

在将会话写入管理员定义的存储机制之前,可以选择对会话进行加密和base64编码。

最佳

谁可以使用会话?

会话接口主要是为其他服务器模块(例如)使用而开发的mod_auth_form,但是可以选择通过HTTP_SESSION环境变量为基于CGI的应用程序授予对会话内容的访问权限。会话可以选择通过插入包含新会话参数的HTTP响应标头来修改和/或更新。

最佳

在服务器上保留会话

可以将Apache配置为跟踪存储在特定服务器或一组服务器上的每个用户会话。此功能类似于典型应用程序服务器中可用的会话。

如果配置了会话,则使用存储在cookie中的会话ID进行跟踪,或者从典型的GET请求中发现的URL查询字符串中嵌入的参数中提取会话ID。

由于会话的内容专门存储在服务器上,因此期望会话内容的私密性。如果存在大量会话,或者大量Web服务器必须彼此共享会话,这确实会对性能和资源产生影响。

mod_session_dbd模块允许通过来将用户会话存储在SQL数据库中mod_dbd

最佳

在浏览器上保留会话

在跟踪服务器上的会话过于耗费资源或不方便的高流量环境中,可以选择将会话的内容存储在客户端浏览器的cookie中。

这样做的好处是,服务器上需要最少的资源来跟踪会话,并且服务器场中的多个服务器无需共享会话信息。

但是,会话的内容会暴露给客户端,从而带来失去隐私的风险。该 mod_session_crypto模块可配置会话写入到客户端之前会话的内容进行加密。

mod_session_cookie允许用户会话上的HTTP cookie中的浏览器的存储空间。

最佳

基本范例

创建会话就像打开会话并确定将在何处存储会话一样简单。在此示例中,会话将存储在浏览器中的Cookie中session

基于浏览器的会话

Session On
SessionCookieName session path=/

除非可以写入或读取会话,否则该会话无用。以下示例显示了如何通过使用称为的预定HTTP响应标头将值注入会话中 X-Replace-Session

撰写会议

Session On
SessionCookieName session path=/
SessionHeader X-Replace-Session

标头应包含名称值对,其格式与URL中的查询字符串相同,如下例所示。将密钥设置为空字符串具有从会话中删除该密钥的作用。

CGI写入会话

#!/bin/bash
echo "Content-Type: text/plain"
echo "X-Replace-Session: key1=foo&key2=&key3=bar"
echo
env

如果已配置,则可以从HTTP_SESSION环境变量中读取会话。默认情况下,会话保持私有状态,因此必须使用SessionEnv指令显式打开该会话 。

从会议中阅读

Session On
SessionEnv On
SessionCookieName session path=/
SessionHeader X-Replace-Session

读取后,CGI变量HTTP_SESSION应包含value key1=foo&key3=bar

最佳

会议隐私

使用浏览器的“显示cookie”功能,您将看到会话的清晰文本表示。如果最终用户需要保持对会话内容的不了解,或者第三方可以未经授权访问会话中的数据,则这可能是一个问题。

会话的内容可以可选地加密,然后再使用mod_session_crypto 模块放置在浏览器上。

基于浏览器的加密会话

Session On
SessionCryptoPassphrase secret
SessionCookieName session path=/

会话将在加载时自动解密,并在保存时由Apache加密,使用该会话的基础应用程序不需要知道加密正在进行中。

还可以根据需要对存储在服务器而非浏览器上的会话进行加密,从而在使用该mod_session_dbd模块在服务器场中的Web服务器之间共享潜在敏感信息的情况下提供隐私。

最佳

Cookie隐私权

HTTP cookie机制还提供了隐私功能,例如将cookie传输限制为仅受SSL保护的页面的功能,或防止基于浏览器的javascript获取对cookie内容的访问的功能。

警告

一些HTTP cookie隐私功能是非标准的,或者在浏览器之间实现不一致。会话模块允许您设置cookie参数,但不能保证浏览器会尊重隐私。如果需要考虑安全性,请使用 mod_session_crypto加密会话的内容,或使用mod_session_dbd 模块将会话存储在服务器上。

可以在cookie名称之后指定标准cookie参数,如下例所示。

设置Cookie参数

Session On
SessionCryptoPassphrase secret
SessionCookieName session path=/private;domain=example.com;httponly;secure;

如果Apache服务器构成后端原始服务器的前端,则可以使用SessionCookieRemove指令从传入的HTTP标头中删除会话cookie 。这样可以防止会话Cookie的内容从后端服务器访问。

最佳

会话支持身份验证

在许多应用程序服务器中,身份验证模块可以在登录后使用会话来存储用户名和密码。在 mod_auth_form会话中保存用户的登录名和密码。

基于表单的身份验证

Session On
SessionCryptoPassphrase secret
SessionCookieName session path=/
AuthFormProvider file
AuthUserFile "conf/passwd"
AuthType form
AuthName "realm"
#...

请参阅该mod_auth_form模块以获取文档和完整示例。

最佳

将会话与外部应用程序集成

为了使会话有用,必须有可能与外部应用程序共享会话的内容,并且外部应用程序必须有可能编写自己的会话。

一个典型的示例可能是更改由设置的用户密码的应用程序 mod_auth_form。该应用程序将需要从会话中读取当前的用户名和密码,对用户密码进行必要的更改,然后将新密码写入会话中,以便无缝过渡到新密码。

第二个示例可能涉及一个首次注册新用户的应用程序。注册完成后,用户名和密码将写入会话,从而无缝过渡到登录状态。

Apache模块
服务器中需要访问会话的模块可以使用 mod_session.h API来读取和写入会话。该机制由的模块使用mod_auth_form
CGI程序和脚本语言
在Web服务器中运行的应用程序可以选择从HTTP_SESSION环境变量中检索会话的值。会话应按照HTML规范的描述编码为 application / x-www-form-urlencoded字符串 。环境变量由指令的设置控制 。可以通过返回具有 指令设置名称的application / x-www-form-urlencoded响应标头,由脚本写入会话 。在这两种情况下,任何加密或解密,以及从所选存储机制读取会话或将会话写入所选存储机制均由SessionEnvSessionHeadermod_session 模块和相应的配置。
背后的应用 mod_proxy
如果该SessionHeader 指令用于定义HTTP请求标头,则该会话将被编码为application / x-www-form-urlencoded字符串,将对应用程序可用。如果响应中提供了相同的标头,则此响应标头的值将用于替换会话。如上所述,任何加密或解密,以及从所选存储机制读取会话或将会话写入所选存储机制均由mod_session模块和相应的配置来处理 。
独立应用程序
应用程序可能选择在Apache HTTP服务器无法控制的范围内操纵会话。在这种情况下,应用程序有责任从所选的存储机制中读取会话,解密会话,更新会话,加密会话并将会话适当地写入所选的存储机制。
最佳

会话 指令

描述:为当前目录或位置启用会话
句法:Session On|Off
默认:Session Off
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:验证配置
状态:延期
模块:mod_session

Session指令启用目录或位置容器的会话。其他指令控制会话的存储位置以及如何维护隐私。

最佳

SessionEnv 指令

描述:控制是否将会​​话内容写入 HTTP_SESSION环境变量
句法:SessionEnv On|Off
默认:SessionEnv Off
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:验证配置
状态:延期
模块:mod_session

如果设置为On,则SessionEnv伪指令使会话的内容写入名为HTTP_SESSION的CGI环境变量。

该字符串以URL查询格式编写,例如:

key1=foo&key3=bar

最佳

SessionExclude 指令

描述:定义将忽略会话的URL前缀
句法:SessionExclude path
默认:none
内容:服务器配置,虚拟主机,目录,.htaccess
状态:延期
模块:mod_session

SessionExclude指令仅允许相对于URL前缀禁用会话。通过定位应为其维护会话的更精确的URL空间,这可用于使网站更高效。默认情况下,目录或位置中的所有URL都包含在会话中。该 SessionExclude指令优先于该 SessionInclude指令。

警告

此伪指令与HTTP cookie中的path属性具有相似的用途,但请勿与此属性混淆。该伪指令未设置路径属性,该路径属性必须单独配置。

最佳

SessionExpiryUpdateInterval 指令

描述:定义会话的过期时间可能会改变的秒数,而无需更新会话
句法:SessionExpiryUpdateInterval interval
默认:SessionExpiryUpdateInterval 0 (always update)
内容:服务器配置,虚拟主机,目录,.htaccess
状态:延期
模块:mod_session
兼容性:在Apache 2.4.41及更高版本中可用

SessionExpiryUpdateInterval指令允许会话避免仅在到期时间已更改的情况下与写入每个请求的会话相关的成本。使用时,可以使用它来提高网站的效率或减少数据库的负载 mod_session_dbd。如果会话中存储的数据已更改或过期更改的时间超过配置的间隔,则始终会写入会话。

将时间间隔设置为零将禁用此伪指令,并且会话到期将针对每个请求进行刷新。

该指令仅在与SessionMaxAge启用时才 有效。只有在会话中存储的数据已更改时,才会写入没有到期的会话。

警告

由于会话到期可能不会随每个请求刷新,因此会话有可能提前到秒间隔。使用较小的时间间隔通常可以提供足够的节省,同时对到期分辨率的影响最小。

最佳

SessionHeader 指令

描述:从给定的HTTP响应标头导入会话更新
句法:SessionHeader header
默认:none
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:验证配置
状态:延期
模块:mod_session

SessionHeader指令定义HTTP响应标头的名称(如果存在),将对其进行解析并将其写入当前会话。

标头值应采用URL查询格式,例如:

key1=foo&key2=&key3=bar

如果将密钥设置为空字符串,则将从会话中删除该密钥。

最佳

SessionInclude 指令

描述:定义会话有效的URL前缀
句法:SessionInclude path
默认:all URLs
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:验证配置
状态:延期
模块:mod_session

SessionInclude指令允许使会话仅对特定的URL前缀有效。通过定位应为其维护会话的更精确的URL空间,这可用于使网站更高效。默认情况下,目录或位置中的所有URL都包含在会话中。

警告

此伪指令与HTTP cookie中的path属性具有相似的用途,但请勿与此属性混淆。该伪指令未设置路径属性,该路径属性必须单独配置。

最佳

SessionMaxAge 指令

描述:定义会话的最大年龄(以秒为单位)
句法:SessionMaxAge maxage
默认:SessionMaxAge 0
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:验证配置
状态:延期
模块:mod_session

SessionMaxAge指令定义了会话将保持有效的时间限制。保存会话后,此时间限制将重置,现有会话可以继续。如果会话的时间早于此限制,而没有要求服务器刷新会话的请求,则该会话将超时并被删除。如果使用会话来存储用户登录详细信息,则具有在给定时间后自动注销用户的作用。

将最大值设置为零将禁用会话到期。

可用语言: zh  |  fr 

最佳

注释

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