Session 身份验证会话ID vs cookie

Session 身份验证会话ID vs cookie,session,authentication,language-agnostic,forms-authentication,Session,Authentication,Language Agnostic,Forms Authentication,我试图找出使用基于sessionid的身份验证与基于cookie的身份验证的优缺点 据我所知,基于cookie的身份验证 用户提交登录请求并发送其凭据 根据数据库检查凭据 Cookie将与用户详细信息一起设置 这将通过https完成,cookies将被加密 在.net中,如果这是authcookie,则将设置用户标识 数据库只命中一次,后续调用只需检查auth cookie 在基于会话的身份验证的情况下 用户提交登录请求并发送其凭据 根据数据库检查凭据 将生成会话id,并将其存储在数据库中

我试图找出使用基于sessionid的身份验证与基于cookie的身份验证的优缺点

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

  • 用户提交登录请求并发送其凭据
  • 根据数据库检查凭据
  • Cookie将与用户详细信息一起设置
  • 这将通过https完成,cookies将被加密
  • 在.net中,如果这是authcookie,则将设置用户标识
  • 数据库只命中一次,后续调用只需检查auth cookie
在基于会话的身份验证的情况下

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


有什么理由选择其中一个而不是另一个吗?基于cookie的安全性是否较低(即使您对其进行加密和签名)?基于会话的性能是否会因为每次调用都会命中数据库而变得更差?我已经看到一些网站倾向于这样或那样,但无法得到一个什么样的方法使用清晰的图片。如有任何讨论/建议,将不胜感激

我很难理解这个问题。据我所知,基于表单的身份验证有两种类型:cookies和cookieless。首选基于Cookie的身份验证

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

在无cookieless方法中,cookie的有效负载使用HTTPModule放在url中。此方法仅在设备不支持Cookie(罕见)时使用。没有cookieless的方法不是首选——它使AJAX更加困难

见:


对延迟回复表示歉意。我目前正在审核一些代码(Java),这些代码实际上是在用户登录时创建会话密钥的,并将其存储为cookie,每次调用受保护的服务时,都会获取会话密钥并检查数据库以查看会话是否处于活动状态。这似乎与asp forms auth的设计不同,在asp forms auth中,我们不会每次都点击db。使用会话和检查数据库的方法似乎效率低下。我这样想对吗?我的观点是:对每个请求进行会话检查来访问数据库并不是什么大问题。会话表本身需要仔细索引和优化,以避免瓶颈。谢谢。当然,我认为上述方法不一定比forms auth方法更安全吗?如果会话密钥在服务器上加密并作为cookie发送回客户端,那么我看不出有问题。如果会话密钥没有加密,我会有问题。用户可以开始欺骗密钥并尝试模拟其他用户。如果正在使用SSL,您不会太担心cookie被盗,而是担心经过身份验证的用户可能会试图模拟或窃取其他用户的会话。底线:用户不应该能够读取他们的身份验证票据/密钥。谢谢。会话密钥在服务器上加密,并且正在使用SSL。