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

属性值

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

示例

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

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

注解

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

Note

为了提高应用程序的安全性,应用程序应允许用户注销,此时应调用该方法 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 方法,则当 regenerateExpiredSessionIdtrue 时,任何发布的数据都将丢失,因为 ASP.NET 执行重定向以确保浏览器在 URL 中具有新的会话标识符。

Note

在设置 regenerateExpiredSessionId 属性以减少 true 不需要共享会话数据的可能性时,它不会通过获取值并将其包含在对服务器的请求中来防止不需要的源获取 SessionID 对其他用户会话的访问权限。 如果要将专用或敏感信息存储在会话状态中,建议使用 SSL 来加密浏览器和服务器之间的任何通信,包括该 SessionID消息。

适用于

另请参阅