.NET Core C# 退出登录时销毁会话与清除缓存的最优实现方式是什么
.NET Core 退出登录最优实现方案
完整实现代码
场景1:使用ASP.NET Core Identity做身份认证
public async Task<IActionResult> Logout() { // 清除身份认证Cookie,替代原.NET Framework的FormsAuthentication.SignOut() await HttpContext.SignOutAsync(); // 清空当前会话所有存储数据 HttpContext.Session.Clear(); // 删除会话Cookie,彻底销毁会话 if (Request.Cookies.ContainsKey(".AspNetCore.Session")) { Response.Cookies.Delete(".AspNetCore.Session"); } // 禁用客户端缓存,避免用户后退看到登录后敏感内容,替代原Response.Cache相关配置 Response.Headers.CacheControl = "no-cache, no-store, must-revalidate"; Response.Headers.Pragma = "no-cache"; Response.Headers.Expires = "0"; return RedirectToAction("Login"); }
场景2:自定义身份认证(未使用Identity)
除了上面的逻辑外,额外删除你自定义的登录态Cookie即可:
// 示例:删除自定义的登录态Cookie if (Request.Cookies.ContainsKey("你的自定义登录Cookie名")) { Response.Cookies.Delete("你的自定义登录Cookie名"); }
原有代码优化点
你之前写的代码里HttpContext.Session.Remove(cookie)是无效逻辑:Session.Remove是删除会话存储里的指定键值对,传入Cookie名匹配不到任何会话数据,直接去掉即可。同时不需要遍历所有Cookie,直接判断目标Cookie是否存在再删除性能更高。
实现效果对应说明
- 替代
Session.Abandon():通过HttpContext.Session.Clear()清空会话数据 + 删除.AspNetCore.SessionCookie实现完全销毁会话 - 替代
FormsAuthentication.SignOut():Identity场景调用HttpContext.SignOutAsync(),自定义认证场景删除自行维护的登录态Cookie - 替代缓存配置:直接设置三个响应头即可覆盖原所有缓存禁用需求,兼容所有主流浏览器
内容的提问来源于stack exchange,提问作者devman
相关产品推荐
相关产品推荐

