什么是合适的WWW
我目前正在使用的应用程序具有会话超时值。 如果用户未进行超过此值的交互操作,则会尝试加载下一页,系统会提示他们登录。
所有请求都通过这种机制进行路由,包括AJAX调用。 最初,我们发送了一个包含登录页面的200头文件,它引入了AJAX的一些问题,因为如果发送了200响应,代码就会运行,并且从这些RPC调用返回的大部分数据都是JSON或获得评估的原始JavaScript问:|)。
我建议401更好,因为我们的JSON解析器不会尝试使用HTML登录页面。:)
然而,在阅读规范时,我注意到WWW-Authenticate
字段也必须发送。
这个领域有什么价值? Application Login
足够?
当指示HTTP基本认证时,我们返回如下内容:
WWW-Authenticate: Basic realm="myRealm"
尽管Basic
是该计划,其余的则非常依赖该计划。 在这种情况下,领域只是向浏览器提供一个文字,在提示用户标识和密码时可以显示给用户。
您显然不使用Basic,但是因为使用基本身份验证时没有会话过期的问题。 我假设你正在使用某种形式的基于表单的身份验证。
从回忆中,Windows质询响应使用不同的方案和不同的参数。
诀窍在于,由浏览器决定它支持哪些方案以及它如何响应它们。
我的直觉是,如果你使用基于表单的身份验证,那么你需要使用200 + relogin页面,但添加一个浏览器将忽略的自定义标题,但是你的AJAX可以识别。
为了获得非常好的用户+ AJAX体验,请让脚本挂在发现会话过期的AJAX请求上,通过弹出窗口发出重新登录请求,并在成功时重新提交原始AJAX请求并继续正常进行。
避免只让脚本每隔5分钟就会触发一次该站点的作弊行为,以使会话保持活跃状态,因为这会破坏会话过期点。
另一种选择是刻录AJAX请求,但这是一种糟糕的用户体验。
不,您必须指定要使用的身份验证方法(通常为“基本”)和身份验证领域。 有关示例请求和响应,请参阅http://en.wikipedia.org/wiki/Basic_access_authentication。
您可能还需要阅读RFC 2617 - HTTP身份验证:基本和摘要访问身份验证。
当用户会话超时时,我发送一个HTTP 204状态码。 请注意,HTTP 204状态不包含内容。 在客户端,我这样做:
xhr.send(null);
if (xhr.status == 204)
Reload();
else
dropdown.innerHTML = xhr.responseText;
这是Reload()函数:
function Reload() {
var oForm = document.createElement("form");
document.body.appendChild(oForm);
oForm.submit();
}
链接地址: http://www.djcxy.com/p/12447.html
上一篇: what's an appropriate WWW
下一篇: ASP.NET MVC ajax to WebAPI returning WIF sts redirect response