在asp.net中使用session [“”]的缺点

时间:2014-12-06 21:11:14

标签: asp.net asp.net-mvc

在我的项目中,我使用会话来存储要在我的项目的所有页面中使用的用户信息(用户名,密码,个人图像和性别)。我还使用另外两个会话来存储小字符串。使用会话有什么不利之处吗?是否存在使用会话存储用户密码的风险?

2 个答案:

答案 0 :(得分:3)

需要考虑的一些事项:

  • 不要存储密码。您应该对传入的密码进行哈希处理,根据数据库中的哈希进行验证,然后再保留它。
  • 您应该尽量避免在整个应用程序中使用写访问会话,因为您最终会强制asp.net序列化来自同一会话的传入请求。使用只读会话来避免这种情况。如果同时启动多个ajax调用,这可能会变得明显。更多信息:https://connect.microsoft.com/VisualStudio/feedback/details/610820/session-based-asp-net-requests-are-serialized-and-processed-in-a-seemingly-inverse-order
  • 在会话中存储太多数据可能会导致可伸缩性问题,因为所有这些信息都保存在服务器的内存中。如果切换到SQL存储进行会话(在webfarm / cloud部署中很常见),那么如果会话很大,服务器上的每个请求都会使该会话数据在服务器和数据库之间来回传递。
  • 进入会话的内容应为Serializable ,以防您决定转移到其他持久存储(例如sql server)
  • 使用会话保留信息可能不适合使用无状态REST / WebApi 端点(如果您将来需要创建任何端点)
  • 过多使用会话进行存储可能会使单元测试更加困难(您必须模拟会话)
  • 通过"个人形象"我假设您正在存储URL等,而不是实际的二进制图像。 避免存储二进制内容。只有在浏览器请求时才返回二进制图像文件,并且不将其存储在内存中,浏览器可以轻松缓存该内容。

您可能还会发现此答案中链接的参考资料可用于提供其他信息:https://stackoverflow.com/a/15878291/1373170

答案 1 :(得分:1)

使用Session和任何依赖于机器的属性的主要问题是网站的可扩展性,因此如果您想将网站部署到服务器场,那么您可以看到问题,具体取决于机器状态属性请求可以在不同的机器上处理。

希望有所帮助。