Eventuali duplicati:
Cache v.s SessionQual è la differenza tra HttpRuntime.Cache e Session?
Sto usando un po 'di codice che utilizza HttpRuntime.Cache per memorizzare un valore. Tuttavia, quando chiudo la finestra, la cache scompare. C'è qualche vantaggio nell'utilizzare questo oltre la sessione?
Ecco il mio codice:
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();
}
Salve quindi HttpRuntime.Cache ["access_token"] è visibile a tutti gli utenti? Ecco come è stato scritto nel tutorial, questa sarebbe una vulnerabilità di sicurezza molto grande allora! – Darren
La sessione è anche univoca per thread di lavoro in base a http://stackoverflow.com/questions/2151251/asp-net-web-garden-how-many-worker-processes-do-i-need – Jeff
@Jeff. Questa domanda afferma che con la normale archiviazione di sessione InProc, 'Session' è univoco per worker * process *, non per * thread *. La differenza è enorme: ASP.NET usa sempre molti thread, ma molti processi solo se configurato in questo modo. Con più processi di lavoro, 'Session' dovrebbe probabilmente essere memorizzato out-of-process che è possibile. –