jhe*_*cks 10 ajax jquery xmlhttprequest http-authentication stateless-session
我有一个标准的HTML登录页面,我宁愿使用它而不是浏览器提供的标准HTTP身份验证弹出窗口.今天,我在登录后使用会话cookie跟踪会话,但我希望无状态并且每次都通过HTTP身份验证.我正在尝试的Web服务已经支持这一点,所以这是一个仅限浏览器的问题.
在jQuery中添加身份验证凭据是微不足道的,但我不知道如何保留它们.如果您从登录页面(jsp)转到主页(另一个jsp),您显然不会保留登录页面中的用户名和密码字段.我知道如果您从弹出窗口输入它们,某些浏览器将存储您的HTTP身份验证凭据,但我不知道它们是否在使用XHRRequest时被存储.如果他们这样做,浏览器之间是否有很多一致性?
此外,用户也需要能够"退出"应用程序.如果浏览器存储身份验证凭据,是否有办法使用JavaScript清除它们.
我觉得我不能成为第一个试图解决这个问题的人.是否有一些jQuery插件或已经处理过的东西?或者根本不可能做我想做的事情?
下面的答案是 2012 年发布的,链接大多已失效。然而,从那时起,出现了使用JSON Web Tokens来实现同一解决方案的更优雅的基于标准的方法。这是一篇很好的博客文章,解释了如何使用它们。
大多数答案都没有抓住重点,即避免进行任何服务器端会话。我不希望服务器中有任何应用程序状态。我将奖励最接近的答案,但真正的功劳要归功于休息讨论组和Jon Moore的正确答案,以及Mike Amundsen帮助我真正理解它。
我得到的最佳答案是使用 cookie,但不是大多数应用程序服务器提供给您的典型自动会话 id cookie。cookie(将自动随每个后续请求发送)是由服务器签名的用户标识符和时间。您可以在 cookie 中包含过期时间,以便它模拟服务器上典型的 30 分钟会话(这意味着您必须通过后续请求将其向前推进),并防止相同的 cookie 永远有效。
XHR/AJAX 部分是一个转移注意力的部分。无论您是执行 XHR 请求还是老式的逐页 Web 应用程序,这都适用。要点是: