1

我想在页面加载之前访问浏览器的 url 并替换它。

我只是不希望用户能够看到他/她登陆的页面。

我虽然在 Page_Init 中访问 url,但我不知道如何。

有什么想法或更好的解决方案吗?

已编辑:我不需要更改(或删除)URL 中的服务器名称,只需更改文件夹/文件名。因此,如果原始页面位置的形式为:http://www.server.com/folder/file.aspx我想将其更改为http://www.server.com/misc/GeneralPage.aspxhttp://www.server.com/

Response.Redirect 不行。我想留在同一页面,但要更改 URL。

Server.Transfer 是带有帮助程序预登陆文件的默认解决方案,但对我来说还不够好。我想留在同一页面,但要更改显示的 URL。


解决方案:

这里有一个涉及 HTML5 的答案和另一个解决方案方向,我打算很快进行调查,但它不再在这里(消失了)。如果这是你的答案,请再写一次。这是一个重要的。

我在这里给出了作为我的行动决定的最佳选择(目前,直到我找到更好的解决方案),但我不相信它(我没有将其标记为答案)。这是一个经过详细测试的解决方案。

4

4 回答 4

2

由于浏览器安全功能,这是不可能的。如果浏览器允许程序员显示与用户实际访问的 URL 不同的 URL,那么将会有更多的人在不知不觉中将其敏感的银行信息交给第三方。

URL 应该标识浏览器请求并由服务器返回的特定资源。

话虽如此,您可以在域管理级别使用域屏蔽技巧。GoDaddy 使用的一种技术是使用掩码转发您的域,这实际上将您的网站加载到 iframe 中,以便原始 URL 保留在原始域中,而新内容在 iframe 中提供。

你也可以自己使用这种技术。当您将内容返回给浏览器时,返回一个 iframe,其 src 属性指向新内容。

尽管如此,就修改显示的实际 URL 而言,这是不可能的,而且我不确定您为什么真的想要这样做。

于 2012-05-06T01:28:23.367 回答
1

出于安全原因,您不能更改整个 URL 以阻止 URL 欺骗和网络钓鱼攻击。

但是,您可以更改井号 (#) 符号之后的 URL 的任何部分。这部分 URL 仅在客户端 javascript 中可用,可用于存储当前页面的状态信息而无需重新加载。它是windows.location.hash财产。

于 2012-05-06T01:34:34.160 回答
0

我在这里给出我的行动决定(暂时的)。一旦我决定一个更好的解决方案,我会在此处发布。

虽然这是我希望避免的解决方案,但它看起来是目前最好的解决方案。

阅读所有答案和评论后,我决定的解决方案是有一个空的登陆页面并使用 Server.Transfer 到隐藏文件。我将 Server.Transfer 放在 Page_Init 中。

提货页Lading.aspx仅包含一行:

<%@ CodeFile="Landing.aspx.cs" Inherits="Landing" %>

它背后的代码Landing.aspx.cs包含:

using System;
public partial class Landing : System.Web.UI.Page
{protected void Page_Init(){Server.Transfer("~/Landing_Hidden.aspx");}}

隐藏页面Landing_Hidden.aspx是一个常规的 aspx 页面。

非常感谢大家的回答和评论。

我发现在此处提到的网络钓鱼视图中,除了更改 URL 之外,使用上述解决方案没有任何区别。

于 2012-05-06T10:07:22.630 回答
0

var stateObj = { foo: "bar" }; history.pushState(stateObj, "第 2 页", "bar.html");

您可以通过创建 java-script 函数并在按钮的 clientclick 事件上调用它来使用此代码

代替 bar.html 只需更改为您的任何网址,例如 index.html ,当您单击按钮时,您的输出将如下所示,即 www.dotnetprofessional.in/bar.html 或 www.dotnetprofessional.in/index.html没有页面回发或刷新

参考

于 2014-12-10T07:13:25.730 回答