c# - 处理 session 以实现可伸缩性

标签 c# asp.net-mvc session asp.net-mvc-4

我目前正在制作一个非常面向数据库的网站,有点像 Stack Overflow。我的问题是如何处理将跨多个服务器传输的 session (我计划使用 AWS 服务器进行自动缩放)。

目前我认为我不应该出于可扩展性和速度目的使用表单例份验证。相反,我会在数据库中有一个名为 session 的表,它存储以下信息:SessionID、UserID、ExpDate、CreateDate、IP、Status('LogedIn'、'LogedOut'、'Expired')。

从 cookie 的角度来看,我最担心的是安全性,而且当我有很多服务器在运行时,我没有看到瓶颈情况的经验。

请提供您的见解。我还想知道其他人和 Stack Overflow 是如何处理这个困境的。

仅供引用:出于同样的原因,我使用 PetaPoco 而不是 Entity Framework,因为这样做可以缩短大约 600 毫秒。

感谢您的帮助!

最佳答案

我不知道使用 Forms Authentication 有任何可伸缩性问题。本质上,它将授权 token 加密到 cookie 中,并且在每次请求时将 cookie 呈现给服务器。使用 cookie 而不是进程内 session 确实允许可扩展性,因为它不依赖于任何一个特定的服务器。

加密使用存储在服务器上的 machineKey 值,因此破解加密需要获取 machineKey。

一般来说,我尽量不实现自己的授权,而是尝试坚持使用已经过测试的开箱即用的解决方案。

您使用 session 存储的方法仍然需要使用 cookie 来存储某种指向 session 存储的指针。根据您的实现,可能很容易猜到此信息并很容易冒充其他人。

编辑:

由于您在 AWS 上运行,我建议您利用 ElastiCache 来减少数据库命中数。

关于c# - 处理 session 以实现可伸缩性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18089948/

相关文章:

ruby - 在 Internet Explorer 上发布期间 Sinatra session 丢失

php - 将用户 ID 存储或获取为 PHP session 变量

c# - 从信息路径模板创建表单

c# - 有没有更好的方法来获取表结构?

javascript - c# asp.net mvc - 使用参数从 html.actionlink 调用脚本函数

asp.net-mvc - RequireSSL 在带有 Querystring 的 Url 上失败

c# - 无法将 'Vary' header 附加到响应

c# - SQL 日期排序依据

asp.net - 在 Visual Studio 2013 中打开 cshtml 文件时未将对象引用设置为对象的实例

c# - Windows Phone 7 Silverlight 使用 session