Duplicar posible:
Cache v.s Session¿Cuál es la diferencia entre HttpRuntime.Cache y Session?
estoy usando un código que utiliza HttpRuntime.Cache para almacenar un valor. Sin embargo, cuando cierro la ventana, el caché desaparece. ¿Hay algún beneficio al usar esto durante la sesión?
Aquí está mi código:
protected dynamic Code()
{
dynamic code;
if (String.IsNullOrEmpty(myHttpContext.Request.QueryString["code"]))
{
code = HttpRuntime.Cache["code"];
}
else
{
code = myHttpContext.Request.QueryString["code"];
HttpRuntime.Cache.Insert("code", myHttpContext.Request.QueryString["code"]);
}
return code;
}
protected string GetAccessToken(bool regenerate = false)
{
if (HttpRuntime.Cache["access_token"] == null || regenerate == true)
{
try
{
Dictionary<string, string> args = GetOauthTokens(myHttpContext.Request.QueryString["code"]);
HttpRuntime.Cache.Insert("access_token", args["access_token"], null, DateTime.Now.AddMinutes(Convert.ToDouble(args["expires"])), TimeSpan.Zero);
}
catch
{
OutputError("Code", "Bad Verification Code");
}
}
return HttpRuntime.Cache["access_token"].ToString();
}
Hola, ¿HttpRuntime.Cache ["access_token"] está visible para todos los usuarios? Así es como estaba escrito en el tutorial, ¡esta sería una gran vulnerabilidad de seguridad entonces! – Darren
La sesión también es única por subproceso de trabajo según http://stackoverflow.com/questions/2151251/asp-net-web-garden-how-many-worker-processes-do-i-need – Jeff
@Jeff. Esa pregunta indica que con el almacenamiento de la sesión InProc normal, 'Session' es único por trabajador * process *, no por * thread *. La diferencia es enorme: ASP.NET siempre usa muchos hilos, pero muchos procesos solo cuando están configurados de esta forma. Con múltiples procesos de trabajo, 'Session' probablemente debería almacenarse fuera de proceso, lo cual es posible. –