【问题标题】:Using FormsAuthentication in asp.net to redirect on unprotected page在 asp.net 中使用 FormsAuthentication 在未受保护的页面上重定向
【发布时间】:2013-02-06 05:09:09
【问题描述】:

我有一个奇怪的场景。我有forms authentication 正常工作。我的受保护页面位于一个文件夹中,如果我导航到它们,我将被重定向到登录页面,并在querystring 中返回URL。到目前为止,一切都很好。但我有一页是搜索结果页。要求是,如果用户未登录,页面会隐藏部分数据,但页面的其余部分可以正常查看。

我做了一些技巧来隐藏仅包含经过身份验证的数据的面板,效果很好。我遇到的问题是,如果用户通过搜索过程(这是多步骤)并且在看到结果后想要登录,他们将不得不单击页面顶部的登录链接。这将加载没有返回 url 的登录页面。毕竟,用户单击了指向新页面(登录页面)的链接。提交登录信息后,referrer 错误(应该是当前登录页面)。

因此,在不弄乱适用于受保护文件夹的 FormsAuthentication 系统的情况下,我如何才能将用户返回到他们选择自己登录(从非受保护页面)后的最后一个位置。我意识到这不是 FormsAuthentication 中的缺陷,解决方案可能与此无关,只是想要一些选项。有什么建议吗?

【问题讨论】:

  • 杰夫,如果我没听错的话,用户来自搜索页面,您想将他们重定向到搜索页面吗?你的复杂之处在于搜索参数不方便进入查询字符串?
  • @DaveA,我认为他正在使用 UriRefferer msdn.microsoft.com/en-us/library/…
  • @Devjosh,我是这么想的。但是,虽然我做的 MVC 比 Web 表单多,但我注意到引荐来源网址不适用于发布到的页面(如搜索结果页面)
  • 对不起你们,我问了一个问题然后消失了,因为我在其他问题上被跟踪了一段时间。我道歉!!简而言之,我有一个不在受保护文件夹中的页面,但在页面顶部确实有一个登录链接。当您尝试导航到受保护文件夹中的页面时,您只会获得要返回的 URL。
  • 我实际上解决了这个问题,但我不确定这是不是最好的解决方案。我创建了一个继承 Page 的基本页面。然后我所有的页面都继承了 myBasePage。 myBasePage 包含一个包含该页面 URL 的字符串。 login.aspx 确实继承,但不存储它自己的 url。所以我去的任何页面都会更新 myBasePage.MyUrl。然后在提交后的 login.aspx.cs 中,我重定向到 myBasePage.MyUrl。它有效,但它有点像黑客。还有比这更好的建议吗?

标签: asp.net redirect forms-authentication


【解决方案1】:

你可以用这个

 Request.UrlReferrer.ToString();

它会给你上一页的网址。

编辑 1

这是SO 上的类似问题
Finding previous page Url

编辑 2

public Page PreviousPage { get; }

这里是msdn链接
http://msdn.microsoft.com/en-us/library/system.web.ui.page.previouspage.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

【讨论】:

  • 这实际上行不通,因为假设您在 page1.aspx 上。然后单击登录按钮,将您带到 login.aspx。您填写表格并单击提交。在回发时,UrlReferrer 将是 login.aspx,因为这是您在回发之前访问的最后一页。
猜你喜欢
  • 2012-12-18
  • 2016-08-13
  • 2023-03-25
  • 2012-08-28
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
相关资源
最近更新 更多