当前位置:  开发笔记 > 编程语言 > 正文

如何通过请求 - 响应维护HttpContext

如何解决《如何通过请求-响应维护HttpContext》经验,为你挑选了1个好方法。

我想知道如何维护HttpContext,因为Web的请求 - 响应性质基本上是无状态的.

是否将HttpContext对象的标识符作为__EVENTTarget/__EVENTARGUMENTS隐藏字段的一部分发送,以便HttpRuntime类可以通过从请求(HttpWorkerRequest)中读取此部分来创建HttpContext类?我不认为

请让我知道,因为我试图填补我对http管道的理解,我无法找到任何有关此信息的信息.

我理解像HttpContext.Current.Session ["myKey"] = Value;

只是工作,但如果我不得不用不同的语言(比如perl)做类似的事情,我将不得不使用相同的隐藏字段,不是吗?

谢谢-Venu



1> Mark Bracket..:

为每个请求重新创建HttpContext.但是,HttpSession跨请求存储在服务器上.基本上,HttpSession是Dictionary >.初始密钥(会话ID)由cookie或查询字符串参数提供(如果使用无cookie会话).如果您使用Fiddler,您将看到包含该用户会话密钥的ASP.NET_SessionId cookie.

在代码中:

class HttpSessionState {
   private static readonly Sessions = 
     new Dictionary>();

   public object this(string key) {
      get {
         return GetCurrentUserSession()[key]
      }
      set {
         GetCurrentUserSession()[key] = value;
      }
   }

   private Dictionary GetCurrentUserSession() {
      var id = GetCurrentUserSessionId[]
      var d = Sessions[id];
      if (d == null) {
         d = new Dictionary();
         Sessions[id] = d;
      }
      return d;
   }

   private string GetCurrentUserSessionId() {
      return HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value;
   }
}

真正的实现还处理会话超时,放弃和无cookie会话 - 但基本的想法是相同的.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有