我正在尝试找出使用基于 sessionid 的身份验证与基于 cookie 的身份验证的优缺点
据我所知,基于 cookie 的身份验证
- 用户提交登录请求并发送其凭据
- 根据数据库检查凭据
- Cookie 将使用用户详细信息进行设置
- 这将通过 https 完成,并且 cookie 将被加密。
- 在 .net 中,如果这是 authcookie 将设置用户身份
- 数据库仅被命中一次,后续调用仅检查身份验证 cookie
如果是基于 session 的身份验证
- 用户提交登录请求并发送其凭据
- 根据数据库检查凭据
- 生成 session ID 并将其存储在数据库中
- Cookie 将使用用户详细信息和生成的 session ID 进行设置
- 后续调用会将 session ID 与数据库中的 session ID 进行比较
- 数据库每次都会被命中
问题
有什么理由选择其中一种而不是另一种吗?基于 cookie 的安全性是否较低(即使您对它们进行了加密和签名)?基于 session 的性能是否更差,因为它在每次调用期间都会访问数据库?我见过几个网站倾向于一种或另一种方式,但无法清楚地了解使用哪种方法。任何讨论/建议将不胜感激。
最佳答案
我很难消化这个问题。据我所知,基于表单的身份验证有两种形式:cookie 和无 cookie。首选基于 Cookie 的身份验证。
在基于 cookie 的版本中,用户获得一个 cookie,其值是加密的表单例份验证票证。 cookie 在服务器上被加密。除非加密 key 从 machine.config 共享或在 Web.config 中覆盖,否则 cookie 只能由发布它的服务器解密。我相信加密是AES,这是非常安全的。
在无 cookie 方法中,cookie 的有效负载使用 HTTPModule 放入 url 中。此方法仅在设备不支持 cookie 时使用(很少见)。无 cookie 的方法不是首选 - 它使 AJAX 更加困难。
参见:
http://msdn.microsoft.com/en-us/library/1d3t3c61.aspx
和
关于session - 身份验证 sessionid 与 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6454143/