Web身份验证状态 - Session vs Cookie?

时间:2008-12-10 15:55:41

标签: asp.net security authentication cookies session-variables

在页面之间验证和跟踪用户身份验证状态的最佳方法是什么?有人说会话状态,有人说饼干?

我可以只使用具有用户ID的会话变量,并在身份验证时,实例化具有用户信息的自定义User类。然后,在每个页面上,验证会话变量是否仍处于活动状态并从User对象访问基本用户数据?

有什么想法?有什么好的例子吗?

5 个答案:

答案 0 :(得分:25)

对于'安全'而言,优先使用cookie的会话的问题是会话使用cookie来识别用户,因此会话中存在cookie的任何问题。

使用Sessions时要记住的一件事是数据局部性。如果您计划在任何时候扩展到多个Web服务器,则需要非常小心地在会话对象中存储大量数据。

由于你使用.NET,你基本上必须编写自己的会话存储提供程序来处理这个问题,因为InProc不会扩展到1个服务器,数据库提供程序完全是一个坏主意(重点是AVOID DB在缩放时读取此处,而不是添加更多),并且StateServer存在大量容量问题。 (过去,我使用了一个memcached会话存储提供程序来成功解决这个问题。)

我会谷歌搜索已签名的cookie,并考虑使用它而不是常规cookie或会话。它解决了许多安全问题,并消除了会话的局部性问题。请记住,它们会在每次请求时来回传递,因此请谨慎存储数据。

答案 1 :(得分:16)

没有完美的方式来做到这一点。如果你把它存放在一个cookie中,你就会发现cookie被盗了。如果你将它存储在会话中,你将会被剥夺,因为会话可能被劫持。

就个人而言,我倾向于认为会话更可靠,因为客户端上存储的唯一内容是会话密钥。实际数据仍保留在服务器上。如果你愿意的话,它会更接近胸部。然而,这只是我的偏好,一个优秀的黑客无论如何都能够摆脱劣质安全。

无论你做什么,都不要试图自己实现。你会弄错的。使用您的特定平台提供的身份验证系统。您还需要确保有足够的安全预防措施来保护身份验证令牌。

答案 2 :(得分:1)

我不知道它是最好的方式,但我们对自己的方式感到满意。

我们有一个自定义用户对象,我们在用户进行身份验证时进行实例化,然后使用Session在整个应用程序中维护此对象。

在某些应用程序中,我们将其与使用cookie结合起来,以便不断扩展会话。

答案 3 :(得分:0)

Cookie和会话本身并不足够。它们是用于跟踪用户及其工作的工具,但您确实需要考虑使用数据库来保存有关用户的信息,该信息也可用于保护应用程序。

答案 4 :(得分:-3)

会话是Cookie ......