我正在处理的应用程序有一个会话超时值.如果用户之间的交互时间不超过此值,则会尝试加载下一页,然后系统会提示他们登录.
所有发出的请求都通过这种机制进行路由,其中包括AJAX调用.最初我们在登录页面上发送了200个头文件,这引入了AJAX的一些问题,因为如果发送了200个响应,则运行代码,并且从这些RPC调用发回的大多数数据是JSON或得到评估的原始JavaScript(不问:|).
我建议401更好,因为我们的JSON解析器不会尝试使用HTML登录页面.. :)
但是,在阅读规范时,我注意到该WWW-Authenticate
字段也必须发送.
这个领域有什么好处?会Application Login
满足吗?
当指示HTTP基本身份验证时,我们返回类似于:
WWW-Authenticate: Basic realm="myRealm"
虽然Basic
是该计划,但其余部分在很大程度上取决于该计划.在这种情况下,领域只是为浏览器提供一个文字,当提示输入用户ID和密码时,该文字可以显示给用户.
你显然没有使用Basic,因为使用Basic Auth时没有会话到期.我假设你正在使用某种形式的基于表单的身份验证.
通过回忆,Windows Challenge Response使用不同的方案和不同的参数.
诀窍在于,由浏览器决定它支持哪些方案以及它如何响应它们.
我的直觉是,如果您使用基于表单的身份验证是保留200 +重新登录页面,但添加浏览器将忽略但您的AJAX可以识别的自定义标头.
要获得非常好的User + AJAX体验,请让脚本继续查找发现会话过期的AJAX请求,通过弹出窗口发出重新登录请求,并在成功时重新提交原始AJAX请求并继续正常运行.
避免让脚本每隔5分钟到达网站以保持会话存活的作弊,因为这会使会话到期点失效.
另一种选择是烧录AJAX请求,但这是一种糟糕的用户体验.
不,您必须指定要使用的身份验证方法(通常为"基本")和身份验证领域.有关示例请求和响应,请参见http://en.wikipedia.org/wiki/Basic_access_authentication.
您可能还想阅读RFC 2617 - HTTP身份验证:基本和摘要访问身份验证.