【问题标题】:ASP.NET - Response.Redirect Not Populating Url ReferrerASP.NET - Response.Redirect 不填充 URL 引用
【发布时间】: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


【解决方案1】:

所以,我做了一些谷歌搜索来找到我的答案。

不,感谢 Stack Overflow - 开玩笑,=)

因此,URL Referrer 仅由实际的客户端点击(锚标记、按钮)填充。

当您手动将其放入 URL 时不会(这是我的 JavaScript 正在做的事情)。

我要做的解决方案是在 SingleSignOn.aspx 页面上创建一个 cookie,并在我再次重定向之前从 JavaScript 中读取该 cookie。

正是我需要的,更多的饼干。 =(

除非这里有人有更好的主意,否则就是这样。

【讨论】:

  • 非常感谢,我需要一个非常相似的解决方案,因为我正在修改一个大杂烩向导,您实际上可以在其中跳过步骤,因为他们没有验证引荐来源。我也尝试了UrlReferrer,它在开发中工作,但在部署到 IIS 时失败。 cookie 解决方案非常完美!
【解决方案2】:

已经很晚了,但是当您管理响应时。重定向内容,您可以使用查询参数为response.redirect("/?url=home.aspx&q=whatever")

然后您可以在页面加载或初始化时捕获它并采取适当的措施

【讨论】:

  • 非常适合我的用例。
【解决方案3】:

只是一种预感,但请尝试使用绝对 url 代替 / 甚至包括 http:// 部分。

也就是说,您不应该依赖 UrlReferrer,因为它可以从客户端剥离(通过插件,甚至不确定是否通过某些浏览器配置)。

【讨论】:

  • 是的,我试过了,请参阅上面的答案 - 只有客户端单击(按钮、锚点)才会导致引用 http 标头被填充。
  • @RPM1984 k,但是 Redirect("/") 并不是我提到的,它就像 Redirect("myserver.com/")。
  • 是的 - 试过了,也在一个全新的网络项目中试过(所以没有其他因素 - 即 URL 重写会妨碍)。不去。无论如何,cookie 解决方案正在运行,而且我需要从客户端“检查”上一页这一事实,使得它很容易成为一个 cookie。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 2010-11-28
  • 2018-09-22
  • 1970-01-01
相关资源
最近更新 更多