身份验证sessionid与cookie

时间:2011-06-23 12:41:07

标签: session authentication language-agnostic forms-authentication

我试图弄清楚使用基于会话ID的身份验证与基于cookie的身份验证的优缺点

据我所知,基于cookie的身份验证

  • 用户提交发送其凭据的登录请求
  • 根据数据库检查凭据
  • 将使用用户详细信息设置Cookie
  • 这将通过https完成,Cookie将被加密。
  • 在.net中,如果这是authcookie用户身份将被设置
  • 只有一次点击数据库,后续调用只检查身份验证cookie

基于会话的身份验证

  • 用户提交发送其凭据的登录请求
  • 根据数据库检查凭据
  • 会话ID生成并存储在db
  • 将使用用户详细信息和生成的会话ID
  • 设置Cookie
  • 后续调用会将会话ID与数据库中的会话ID进行比较
  • 每次都会点击数据库

问题

有什么理由比较喜欢一个吗?基于cookie的安全性是否较低(即使您对其进行加密和签名)?会话的性能是否因为在每次调用期间到达数据库而变得更糟?我看过几个网站倾向于某种方式,但无法清楚地了解使用何种方法。任何讨论/建议将不胜感激。

1 个答案:

答案 0 :(得分:7)

我很难消化这个问题。据我所知,基于表单的身份验证有两种形式:cookie和cookieless。基于Cookie的身份验证是首选。

在基于cookie的版本中,用户获得一个coookie,其值是加密的Forms Authentication Ticket。 cookie在服务器上加密。除非加密密钥是从machine.config共享或在Web.config中重写的,否则cookie只能由发出它的服务器解密。我相信加密是AES,非常安全。

在无cookie方法中,使用HTTPModule将cookie的有效负载放入url中。此方法仅在设备不支持cookie时使用(很少见)。无cookie的方法不是首选 - 它使AJAX更加困难。

请参阅:

http://msdn.microsoft.com/en-us/library/1d3t3c61.aspx

http://support.microsoft.com/kb/910443