5

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

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

从 cookie 的角度来看,我最大的担忧是安全性,并且当我运行大量服务器时没有经验看到瓶颈场景。

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

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

谢谢您的帮助!

4

2 回答 2

2

我不知道使用表单身份验证有任何可伸缩性问题。本质上,它将授权令牌加密到 cookie 中,并在每次请求时将 cookie 呈现给服务器。使用 cookie 代替进程内会话确实允许可伸缩性,因为它不依赖于任何特定的服务器。

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

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

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

编辑:

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

于 2013-08-06T20:48:57.717 回答
1

我从缓存的角度知道 StackOverflow 是使用 Redis 构建的。

查看哪些工具和技术用于构建 Stack Exchange 网络?.

于 2013-08-06T20:42:26.150 回答