当前位置:  开发笔记 > 编程语言 > 正文

Request.UrlReferrer null?

如何解决《Request.UrlReferrernull?》经验,为你挑选了2个好方法。

在aspx C#.NET页面(我正在运行框架v3.5)中,我需要知道用户来自哪里,因为他们无法登录而无法查看页面.如果我有页面A(用户想要查看的页面)重定向到在页面B(登录页面)中,Request.UrlReferrer对象为null.

背景:如果用户未登录,我将重定向到"登录"页面(B在此方案中).登录后,我想将它们返回到他们被迫登录之前请求的页面.

更新:
一个很好的快速解决方案似乎是:
//if user not logged in Response.Redirect("..MyLoginPage.aspx?returnUrl=" + Request.ServerVariables["SCRIPT_NAME"]);
然后,只需查看登录页面上的QueryString,您强制它们将用户放在成功登录后的位置.



1> Mark Bracket..:

UrlReferrer基于浏览器发送的HTTP_REFERER标头.但是,就像所有留给客户的事情一样,它是可变的.

我知道一些"安全"套件(如诺顿的互联网安全)将剥离该标题,相信它有助于跟踪用户行为.此外,我确信有一些Firefox扩展可以做同样的事情.

底线是你不应该相信它.只需将URL附加到GET字符串并重定向即可.

更新:如评论中所述,将GET参数的重定向限制为仅适用于无域相关链接,拒绝目录模式(../)等可能是个好主意.所以仍然要检查重定向; 如果您遵循标准"不要盲目使用任何用户提供的输入"规则,那么您应该是安全的.


这是一个坏主意,因为有人可以发布这样的链接:http://somedomain.com/login ?returnUrl = http://myshadylink.com
@DanielLorenz - 绝对是一个合理的问题,但这可以通过拒绝其中的域的returnUrl值来轻松处理.

2> Jon Adams..:

如果您使用标准成员资格提供程序,并为目录/页面设置授权,代码将自动设置ReturnUrl的查询参数并在成功登录后重定向.

如果您不想使用成员资格提供程序模式,我建议您手动执行查询字符串参数.HTTP引用不是很可靠.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有