asp.net - 努力在 ASP.NET 中合理地使用 Session 变量

标签 asp.net session-variables

我尝试放弃在 ASP.NET 的 Session 变量中删除所有内容(我来自 Windows 编程背景),并且我通常完全停止在 Session 变量中显式存储任何内容。任何人都可以就您认为 session 变量的可接受用途提供一些指导吗?

这是一个具体示例...我从数据库加载业务对象并填充和编辑屏幕。用户可以编辑值并保存。我使用旧的方式加载业务对象,加载表单,然后将业务对象保存到 session 变量中。如果用户单击“保存”,我将从 session 变量中检索业务对象,替换编辑的值,然后保存它。我从数据库加载业务对象并加载表单的新方法。用户将编辑值并单击“保存”。我将从数据库重新加载业务对象,替换编辑的值,然后保存它。我不是网络编程专家,但我觉得第一种方法是错误的,因为使用 session 变量的耻辱,我觉得第二种方法是错误的,因为它感觉像是一种蹩脚的方法(加载业务对象两次) )。我们在这里不考虑任何形式的缓存。我该如何处理这个问题?

最佳答案

在回发时从数据库重新加载业务对象以保存用户更改,我一点也不觉得被冒犯。

该对象必须来自该回发的某个地方,与快速数据库调用(例如抓取特定对象)相关的有限开销可能是您最好的选择。

在回发时将该业务对象恢复到内存中的选项:

  • 再次从数据库获取它。缺点:一些(小)额外的数据库开销
  • 将其保存在用户的 session 中。缺点:可能仍然会访问数据库(如果 session 状态存储在那里)或使用大量内存(如果 session 状态存储在那里),并且如果多个用户可能访问此对象,则可能会存储多个副本,最糟糕的是,该 session 如果 ASP.NET 出于某种原因清除了该对象,则该对象可能会随着用户点击提交而消失。
  • 来自缓存。缺点:使用一些额外的内存,如果缓存不存在,您仍然需要访问数据库,但我会投入大量资金,任何应用程序都有许多更大的瓶颈来使用缓存。
  • 查看状态。您可以将对象存储在 Viewstate 中(将其发送到客户端,然后客户端将其发回)。缺点:在我看来,这是最糟糕的解决方案。将其添加到 Viewstate 意味着它会通过线路向下游和上游传递,并导致页面大小变得巨大。 Session 不是最好的,但 Viewstate 才是魔鬼。

关于asp.net - 努力在 ASP.NET 中合理地使用 Session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/832843/

相关文章:

php - 变量不会存储在 session 中

session - 无状态 Web 应用程序有哪些好处?

php - 在 session 变量中存储数据库连接

asp.net - 使用 asp.net 用户控件时我应该把 JavaScript 放在哪里?

c# - 在 ASP.NET MVC 中管理用户的最佳方式是什么

c# - 如何在 iframe 中获取 html 代码

c# - 从 GridView 复选框更新数据库

asp.net - 在 iis 7.5 中设置物理内存限制是否会导致垃圾收集器更积极地运行?

php - 将脚本从 PHP mysql_insert_id header 、位置方法转换为 PHP session 方法

mysql - 如何使用 session 变量来缩短存储过程中的参数需求?