Como é HttpContext sendo mantida ao longo de solicitação-resposta
-
07-07-2019 - |
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
Solução
O HttpContext é recriado para cada solicitação. O HttpSession, no entanto, é armazenado no servidor através de pedidos. Basicamente, HttpSession é um Dictionary
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.