身份验证sessionid与cookie

use*_*157 8 language-agnostic authentication session forms-authentication

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

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

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

如果是基于会话的身份验证

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

问题

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

Bre*_*ett 7

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

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

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

看到:

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

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

  • 我的观点:用每次请求的会话检查命中数据库并不是什么大问题.会话表本身需要仔细索引和优化以避免瓶颈. (3认同)
  • 如果会话密钥在服务器上加密并作为cookie发送回客户端,那么我没有看到问题.如果会话密钥未加密,我会遇到问题.用户可以开始欺骗密钥并尝试模仿其他用户.如果使用SSL,您并不担心cookie被盗,而是认证用户可能会尝试冒充或窃取其他用户的会话.底线:用户不应该能够读取他们的身份验证票证/密钥. (3认同)