无Cookie 的 Session State

//–Session State是1997年 ASP引入的技术.
当用户首次连接到站点时,ASP会创建一个类似Hashtable的内存块来会保存Session State,同时
还会创建一个 ID 以便将其与当前用户唯一地联系起来。当下一次发出请求时,该用户将被要求提交该
Session ID,以便检索并正确地还原会话状态。Sessioin ID 是 ASP 和 ASP.NET 完全自主生成的字母
数字字符串. 浏览器会使用Cookie(最早由 Netscape 发明)在客户端保存Session ID,

//–在asp.net中使用无 cookie的session
修改web.config
<sessionState cookieless=”true” />

此时请求http://yourserver/folder/default.aspx,实际上发送的是
http://yourserver/folder/(session ID)/default.aspx

这种做法的缺点是如果在得到ID后浏览了别的网站,然后重新输入原来的URL,会得到一个新的ID
以前的session信息将丢失.

//—实现
无Cookie session的实现依赖于两个模块
1. SessionStateModule.这是一个Managed Http Module,需要ASP.NET 和CLR才能工作.
2. aspnet_filter.dll 这是一个win32 dll, 充当 ISAPI filter,由IIS调用.
二者都截获在请求处理过程中激发的 IIS 事件.

当新浏览器会话的第一个请求进入时,SessionStateModule 读取 web.config 文件中有关 Cookie
支持的设置。如果 节的 cookieless 属性设置为 true,则该模块生成一个Session ID,并把Session ID
填充到资源名称前,从而得到一个新的URL,并且使用 HTTP 302 命令将浏览器重定向到新的 URL。

当每个请求到达 IIS 入口时(远早于它被移交给 ASP.NET),aspnet_filter.dll 获得了一个查看
它的机会。如果该 URL 将会话 ID 嵌入到括号中,则会提取该会话 ID 并将其复制到一个名为
AspFilterSessionId 的请求标头中。然后,重写该 URL 以使其看起来像原来请求的资源,并且将其释放。
这一次,ASP.NET 会话状态模块从请求标头中检索会话 ID,并且通过会话-状态绑定继续工作。

只要该 URL 包含可用来获取会话 ID 的信息,无 Cookie 机制就可以很好地工作。

//—Thumbs Up
在 ASP.NET 中,Session state和forms authentication 证是仅有的两个在后台使用 Cookie 的系
统功能。ASP.NET 1.x 仍需要使用 Cookie 来实现表单身份验证。在 ASP.NET 2.0 中,表单身份验证可以
选择以无 Cookie 方式工作,在这种模式下,用户的身份信息也是通过URL来传递.

//—Thumbs Down
由于Session ID直接显示在浏览器的地址栏中!Cookieless的session是危险的,直接抓一个包含Session
ID的URL,就算换一个计算机使用,还是认为是同一个session.
每次同一个浏览器内部手动键入指向某个站点的URL,都将丢失Cookieless的Session state。

使用Cookieless Session还会引起与链接有关的问题。不能在 ASP.NET 页中具有绝对链接。如果这样做,
那么源自该链接的每个请求都将被视为新会话的一部分。无 Cookie 会话要求您总是使用相对 URL,就像在
ASP.NET 回发中一样。仅当可以将会话 ID 嵌入到 URL 中时,您才可以使用完全限定的 URL。但是,既然会
话 ID 是在运行时生成的,那么如何才能做到这一点呢?

下面的代码中断了该会话:

<a runat=”server” href=”/test/page.aspx”>Click</a>

要使用绝对 URL,可以使用 HttpResponse 类上的 ApplyAppPathModifier 方法:

<a runat=”server” href=<% =Response.ApplyAppPathModifier(”/test/page.aspx”)%> >Click</a>
ApplyAppPathModifier 方法采用一个表示 URL 的字符串作为参数,并且返回一个嵌入了会话信息的绝对 URL。
例如,当您需要从 HTTP 页重定向到 HTTPS 页时,该技巧尤其有用。

最后,请特别注意,还要请您注意的是,对于移动应用程序,如果设备无法处理专门格式化的 URL,Cookieless
Session 可能会出现问题。

参考
无 Cookie 的 ASP_NET (Dino Esposito)
http://www.microsoft.com/china/msdn/library/webservices/asp.net/asppcookieless.mspx
http://msdn.microsoft.com/asp.net/default.aspx?pull=/library/en-us/dnaspp/html/cookieless.asp

ASP.NET Session State

Foiling Session Hijacking Attempts
http://msdn.microsoft.com/msdnmag/issues/04/08/WickedCode/default.aspx

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值