由一个业务需求引发的对 ASP.NET 全局变量的调研及结果
1.看看 Asp.net core Webapi 项目如何优雅地使用分布式缓存2.Asp.net core Webapi 如何执行定时任务?3.试试这 6 个小技巧,提升 EF Core 性能4.C# 完美实现物联网 MQTT 数据通信5.Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写6.如何在 ASP.NET Core Web API 方法执行前后 “偷偷“ 作一些 “坏“ 事?初识 ActionFilterAttribute7.在 ASP.NET Core Web API 中使用异常筛选器捕获和统一处理异常8.操作筛选器的 1 个应用实例:自动启用事务9.并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流10.一个简单的 ASP.NET Core 依赖注入例子,提高代码的可维护性和可扩展性
11.由一个业务需求引发的对 ASP.NET 全局变量的调研及结果
12.服务注册自治,降低 ASP.NET Core Web API 依赖注入的耦合度和复杂度13.ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?14.ASP.NET Core 标识(Identity)框架系列(二):使用标识(Identity)框架生成 JWT Token15.ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证16.ASP.NET Core 标识(Identity)框架系列(四):闲聊 JWT 的缺点,和一些解决思路前言
前段时间使用 ASP.NET MVC + Form Auth 做了一个单机小项目,当时对于采用什么方式来存储登录状态有些纠结,通常的做法是使用 Cookie 或者 Session,但是我想有没有更好的方式来存储登录状态呢?于是花了点时间调研了 ASP.NET 的全局变量使用方式,希望能找到更好的方式来存储登录状态。
以下是本次调研过程及总结。
调研过程及总结
Application
测试过程:
- LoginController 在 Chrome 浏览器写入 Application["Test"] 的值
- 在 Edge 浏览器打开,Application["Test"] 的值依然存在
结论
Application 是全局性的,不太适合存储登录状态
Session
测试过程:
- LoginController 在 Chrome 浏览器写入 Session["Test"] 的值
- 重新刷新 Chrome 浏览器页面,值存在
- 在 Edge 浏览器打开,Session["Test"] 的值不存在
结论
Session 适合存储登录状态,其值存储在服务器端,重启 IIS 或者到时间(默认是20分钟)等方式都会使其丢失
Cookie
测试过程:
- LoginController 在 Chrome 浏览器写入 HttpCookie ["Test"] 的值
- 重新刷新 Chrome 浏览器,值存在
- 在 Edge 浏览器 打开,cookie 不存在
结论
Cookie 适合存储登录状态,其值存储在客户端,不能存储太多信息,安全性没有 Session 好
静态变量
测试过程:
- LoginController 在 Chrome 浏览器写入静态变量 GlobalTest.MyLogin 的值
- 在 Edge 浏览器打开,GlobalTest.MyLogin 的值依然存在
结论
静态变量是全局性的,不太适合存储登录状态
总结
权衡之下,最终还是选择使用 Session,在单机模式下,Session 相对比较安全可靠。当然还可以把登录状态持久化到本地文件或者数据库中,不过这又是另外一回事了,维护起来也相对比较麻烦。
我是老杨,一个执着于编程乐趣、至今奋斗在一线的 10年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得!欢迎关注老杨的公众号(名称:代码掌控者),更多干货等你来
往期精彩
- C# 静态类,高手不想让你知道的 15 个真相
- 封装一个 C# 范围判断函数,从此告别重复编写范围判断代码的烦恼
- 用 C# Stopwatch 计时,让代码性能飞起来!
- 轻装上阵,Visual Studio LocalDB:.NET 程序员的本地数据库神器
- 封装一个C#万能基础数据类型转换器,一招解决所有基础类型转换烦恼
- 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
- 常用的 4 种 ORM 框架(EF Core,SqlSugar,FreeSql,Dapper)对比总结
- C# AutoMapper 10个常用方法总结
- C# 7个方法比较两个对象是否相等
- C# 去掉字符串最后一个字符的 4 种方法
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)