HttpSessionState.IsCookieless 属性

定义

获取一个值,该值指示会话 ID 是嵌入在 URL 中还是存储在 HTTP Cookie 中。

public:
 property bool IsCookieless { bool get(); };
public bool IsCookieless { get; }
member this.IsCookieless : bool
Public ReadOnly Property IsCookieless As Boolean

属性值

如果会话嵌入在 URL 中,则为 true;否则,为 false

示例

下面的代码示例在 cookieless Web.config 文件中将会话属性设置为 true。

<configuration>
  <system.web>
    <sessionState
      mode="InProc"
      cookieless="true"
      regenerateExpiredSessionId="true"
      timeout="30" />
  </system.web>
</configuration>

注解

ASP.NET 使用每个浏览器唯一标识会话。 默认情况下,会话的唯一标识符存储在浏览器中未过期的会话 Cookie 中。 通过在 sessionState 配置元素中将 属性true设置为 cookieless ,可以指定会话标识符不存储在 Cookie 中。

注意

为了提高应用程序的安全性,应用程序应允许用户注销,此时应调用 Abandon 方法。 这减少了不需要的源使用 URL 中的唯一标识符检索存储在用户会话中的专用数据的可能性。

ASP.NET 通过将唯一的会话 ID 自动插入到页面的 URL 中来维护无 Cookie 会话状态。 例如,ASP.NET 修改了以下 URL,以包含唯一会话 ID lit3py55t21z5v55vlm25s55:

http://www.example.com/(S(4danlfat035muve4g0mvgfrr))/orderform.aspx

ASP.NET 修改所有请求页面中包含的链接,方法是在将每个页面发送到浏览器之前,在链接中嵌入会话 ID 值。 只要用户遵循站点提供的链接路径,会话状态就一直保持。 但是,如果用户代理重写 URL,会话状态实例将丢失。

会话 ID 嵌入在 URL 中,该斜杠位于应用程序名称后面的任意剩余文件或虚拟目录标识符之前。 这允许 ASP.NET 在请求中涉及 SessionStateModule 之前解析应用程序名称。

默认情况下,将回收无 Cookie 会话中使用的会话标识符。 也就是说,如果使用已过期的会话 ID 发出请求,则会使用请求随附的会话 ID 启动新会话。 当包含无 Cookie 会话 ID 的链接与多个浏览器共享(可能通过搜索引擎或其他程序)时,此行为可能会导致会话数据被不需要共享。 通过禁用会话标识符的回收,可以减少多个客户端共享会话数据的可能性。 为此,请将 regenerateExpiredSessionIdsessionState 配置元素的 属性设置为 true。 当使用过期的会话 ID 发出无 Cookie 会话请求时,这将导致生成新的会话 ID。 请注意,如果使用过期的会话 ID 发出的请求使用 HTTP POST 方法,则当 为 trueregenerateExpiredSessionId,任何已发布的数据都将丢失,因为 ASP.NET 会执行重定向以确保浏览器在 URL 中具有新的会话标识符。

注意

虽然将 regenerateExpiredSessionId 属性设置为 true 可减少会话数据意外共享的可能性,但它无法防止不需要的源通过获取 SessionID 值并将其包含在对服务器的请求中来获取对另一个用户的会话的访问权限。 如果要在会话状态中存储私有或敏感信息,建议使用 SSL 加密浏览器与包含 SessionID的服务器之间的任何通信。

适用于

另请参阅