在页面之间验证和跟踪用户身份验证状态的最佳方法是什么?有人说会话状态,有人说饼干?
我可以只使用具有用户ID的会话变量,并在身份验证时,实例化具有用户信息的自定义User类.然后,在每个页面上,验证会话变量是否仍处于活动状态并从User对象访问基本用户数据?
有什么想法吗?有什么好例子吗?
对于'安全'而言,通过cookie支持会话的问题是会话使用cookie来识别用户,因此会话中存在cookie的任何问题.
使用Sessions时要记住的一件事是数据局部性.如果您计划在任何时候扩展到多个Web服务器,则需要非常小心地在会话对象中存储大量数据.
由于你使用.NET,你基本上必须编写自己的会话存储提供程序来处理这个问题,因为InProc不会扩展到1个服务器,数据库提供程序完全是一个坏主意(重点是避免数据库读取这里虽然扩展,但没有添加更多),而StateServer有很多容量问题.(过去,我使用了一个memcached会话存储提供程序来成功解决这个问题).
我会谷歌签署cookie并考虑使用它而不是常规cookie或会话.它解决了许多安全问题,并消除了会话的局部性问题.请记住,它们会在每次请求时来回传递,因此请谨慎存储数据.
没有完美的方法来做到这一点.如果你把它存放在一个cookie中,你就会发现cookie被盗了.如果你将它存储在会话中,你将会被剥夺,因为会话可能被劫持.
就个人而言,我倾向于认为会话更可靠,因为客户端上存储的唯一内容是会话密钥.实际数据仍保留在服务器上.如果你愿意的话,它会更接近胸部.然而,这只是我的偏好,一个优秀的黑客无论如何都能够摆脱劣质安全.
无论你做什么,都不要试图自己实现.你会弄错的.使用您的特定平台提供的身份验证系统.您还需要确保有足够的安全预防措施来保护身份验证令牌.