由一个业务需求引发的对 ASP.NET 全局变量的调研及结果
https://img2024.cnblogs.com/blog/3351211/202411/3351211-20241108230758760-181740305.png前言
前段时间使用 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 种方法
https://img2024.cnblogs.com/blog/3351211/202409/3351211-20240920180709919-918692799.gif
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]