在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,您强制它们将用户放在成功登录后的位置.
UrlReferrer基于浏览器应发送的HTTP_REFERER标头.但是,就像所有留给客户的事情一样,它是可变的.
我知道一些"安全"套件(如诺顿的互联网安全)将剥离该标题,相信它有助于跟踪用户行为.此外,我确信有一些Firefox扩展可以做同样的事情.
底线是你不应该相信它.只需将URL附加到GET字符串并重定向即可.
更新:如评论中所述,将GET参数的重定向限制为仅适用于无域相关链接,拒绝目录模式(../)等可能是个好主意.所以仍然要检查重定向; 如果您遵循标准"不要盲目使用任何用户提供的输入"规则,那么您应该是安全的.
如果您使用标准成员资格提供程序,并为目录/页面设置授权,代码将自动设置ReturnUrl的查询参数并在成功登录后重定向.
如果您不想使用成员资格提供程序模式,我建议您手动执行查询字符串参数.HTTP引用不是很可靠.