session - 身份验证 sessionid 与 cookie

标签 session authentication language-agnostic forms-authentication

我正在尝试找出使用基于 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

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

关于session - 身份验证 sessionid 与 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6454143/

相关文章:

PHP __PHP_Incomplete_Class 对象和我的 $_SESSION 数据

ios - 如何将字符串值传递给我应用程序中的所有 ViewController

authentication - 在 Controller 中验证用户并将 session 发送到前端

algorithm - 给定 x,我怎样才能找到加起来为 x 的所有四个数字的集合

架构,大量方法 vs 长参数列表

javascript - 选中后获取所有表行值

objective-c - TouchID 在某些 iPhone 5S 设备上崩溃

ios - 从登录 View Controller 过渡到主页

algorithm - 使用最小堆对 k 排序数组进行排序

c# - 从一个 Controller 调用方法到另一个 Controller 时 session 为空...MVC