Pergunta

Eu estou querendo saber como o HttpContext é mantida uma vez que a natureza de solicitação-resposta da web é essencialmente apátrida.

é um identificador sendo para o HttpContext objeto que está sendo enviado como parte dos __EVENTTarget / __EVENTARGUMENTS campos ocultos para que a classe HttpRuntime pode criar a classe HttpContext lendo esta seção do pedido (HttpWorkerRequest)? Eu não acho

Por favor, deixe-me saber como eu estou tentando preencher alguns buracos no meu entendimento do gasoduto http e eu era incapaz de encontrar qualquer informação sobre isso.

Eu entendo algo como HttpContext.Current.Session [ "myKey"] = Valor;

apenas funciona, mas se eu tivesse que fazer algo semelhante em um idioma diferente (digamos perl), eu teria que usar campos ocultos para o mesmo, não seria eu?

Graças -Venu

Foi útil?

Solução

O HttpContext é recriado para cada solicitação. O HttpSession, no entanto, é armazenado no servidor através de pedidos. Basicamente, HttpSession é um Dictionary >. A chave inicial, o ID de sessão, é proporcionada por um cookie ou um parâmetro de string de consulta (se estiver usando sessões de cookie-less). Se você usar Fiddler, você verá o cookie ASP.NET_SessionId que contém a chave para a sessão do usuário.

No código:

class HttpSessionState {
   private static readonly Sessions = 
     new Dictionary<string, Dictionary<string, object>>();

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

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

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

A implementação real também lida com tempo limite de sessão, abandona e sessões cookieless -. Mas a idéia básica é a mesma

Outras dicas

Eu não acho que há uma resposta para sua pergunta, porque eu não acho que tudo sob o guarda-chuva HttpContext funciona da mesma maneira. No exemplo que você escolheu, o estado da sessão, a chave e valor são armazenados no lado do servidor. A forma como ele sabe como ligar futuras solicitações para que o estado da sessão é usando um cookie que tem uma chave (totalmente diferente) na mesma. Quando o navegador faz outro pedido, envia este cookie com o pedido e o servidor usa para descobrir qual sessão para mapear. Uma vez que figuras-lo, você novamente tem acesso ao dicionário, através de respostas.

Assim, para fazê-lo em perl, você iria querer criar manualmente um cookie e armazenar uma chave única na mesma, tem um mapeamento do lado do servidor dessas chaves únicas para dicionários de estado de sessão, e muito bem fazer o que eu descrevi acima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top