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

问题描述 投票:27回答:5

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

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

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

asp.net security authentication cookies session-variables
5个回答
16
投票

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

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

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


25
投票

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

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

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

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


1
投票

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

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

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


0
投票

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


-3
投票

会话是Cookies ...

© www.soinside.com 2019 - 2024. All rights reserved.