【发布时间】:2011-04-13 13:29:52
【问题描述】:
我觉得我已经这样做了很多次了,但我终其一生都无法弄清楚出了什么问题。
Default.aspx:
protected void Page_Load(object sender, EventArgs e)
{
var r1 = Request.UrlReferrer; // null
var r2 = Request.ServerVariables["HTTP_REFERRER"]; // null
}
SingleSignOn.aspx:
protected void Page_Load(object sender, EventArgs e)
{
Response.Redirect("/");
}
如果我在 URL 中键入“/SingleSignOn.aspx”,它会重定向到 Default.aspx,但引用者为空。
我在这里错过了什么?
我想要做什么(这是一个简化的示例),在任何页面上,我都会有一些 JavaScript 来执行以下操作:
window.location.replace('~/SingleSignOn.aspx');
您猜对了,用户登录并重定向到主页。
但是如果我们刚从那里来,我需要在该 JavaScript 中构建逻辑以不重定向到 SingleSignOn.aspx 页面。
是否只通过实际的链接用户点击来填充引荐来源网址?
那我该怎么做呢?我不想使用 QueryString,因为我不想在 URL 中看到它。
我能想到的唯一其他选项是会话。
请帮忙。 =(
【问题讨论】:
-
很想知道为什么要从 java-script 重定向。您描述的场景,如果用户经过身份验证,我会在服务器端(可能是基页的 OnInit)进行检查。如果没有,则重定向到执行此操作的页面。
-
@VinayC - 这很复杂。基本上我正在使用 Facebook Connect 应用程序 - 页面加载后,javascript 让我知道我能够登录它们,因此我重定向。在执行客户端 API 之前,我不知道我是否可以签署它们。
-
嗯,你可以在用户通过身份验证时添加自己的cookie,然后从javacript,你可以查看cookie是否存在来决定是否重定向。如果您不想使用 cookie,那么您的页面(应该在基本页面中完成)必须在用户通过身份验证时设置一些 JS 变量。 cookie方法的区别在于cookie只需要设置一次(在SingleSignOn.aspx中),而js变量必须在每个页面中设置(因此逻辑应该放在一个公共的基础页面中)。
-
@VinayC - 哈哈,字面上同时回答了同样的事情。
标签: asp.net response.redirect referrer http-referer