2012-07-06 112 views
0

我的Register页面仅适用于已通过身份验证的用户,因此任何人输入http://localhost:52874/register.aspx都将无法访问。ASP.NET奇怪行为

但我从登录页面给它一​​个链接,点击时DOES使用Server.Transfer("Register.aspx", false);

现在,是我喜欢的东西去到寄存器页的无身份验证,这意味着它只能读懂了从Login.aspx页面,这是很好的。

但是,当我按下登录页面上的Submit按钮(在从login.aspx传输之后)时,它立即将我放回login.aspx而不进行任何处理。

然后我来补充:

<location path="Register.aspx"> 
    <system.web> 
     <authorization> 
     <allow users="?" /> 
     </authorization> 
    </system.web> 
    </location> 

为了web配置,使其能够工作,这意味着现在的URL访问。那么,为什么这个行为,为什么让我去使用Server.Tranfer但还是不让我处理按钮点击?

回答

0

这是因为Server.Transfer将当前请求的处理转移到不同的页面。检查后会发生这种情况,看看您是否有权访问请求的页面。即当使用Server.Transfer时,请求是针对您有权访问的页面的,但您通过将该页面的处理传递给您无权访问的页面来规避安全性。

退房Server.Transfer Vs. Response.Redirect

+0

因此,它决定我可以访问Login.aspx,然后当我做一个转移到Register.aspx没有更多的检查......当我点击提交它醒来,并意识到我不应该在那里,让我回来登录? – sprocket12 2012-07-06 10:34:44

+0

@MuhammadA Precisely :-) – magritte 2012-07-06 10:35:24

0

http://www.4guysfromrolla.com/articles/120705-1.aspx - 看看这篇文章对会员供应商。它可能有所帮助:)

如果您只有在登录后才允许用户访问该页面,则可能需要拒绝user =“?”这将拒绝匿名用户访问该页面。

+0

我希望用户只能从Login.aspx上的链接访问register.aspx,它的工作原理,但在Register.aspx提交不起作用......我不知道为什么。 – sprocket12 2012-07-06 10:32:18

+0

您是否尝试过这将允许任何人访问该页面 – thatuxguy 2012-07-06 10:34:46

+0

查看本页的第2步.. http://www.asp.net/web-forms/tutorials/安全/会员/基于用户的授权-CS – thatuxguy 2012-07-06 10:36:42

1

如果你看浏览器地址栏,当你做一个Server.Transfer的URL没有改变 - 这是因为它停止当前页面的处理,并开始处理没有浏览器意识到这一点新的。因此,它会绕过身份验证,直到您回发,即单击按钮时它将您发送回登录。

你应该做的是一个Response.Redirect,它将改变URL并且认证将正确地发生。

0

MSDN

ASP.NET不验证当前用户被授权查看 通过转印法提供的资源。虽然在调用原始的 资源处理程序之前,ASP.NET 授权和验证逻辑运行,但ASP.NET直接调用由Transfer方法指示的处理程序 ,并且不会重新运行新资源的验证和 授权逻辑。如果您的应用程序的 安全策略要求客户端拥有适当的授权,以 访问的资源,应用程序应强制再次授权或 提供自定义访问控制机制。

因此,Server.Transfer("Register.aspx", false);在设计中并未在您的方案中进行身份验证。

我想任何人都应该能够看到注册页面 - 用户应该能够通过URL到达那里。因此,使用web.config文件确保注册页面可用于未经身份验证的用户,从而更改您的大纲。