5

我使用 Asp.Net Web Forms 创建了一个管理员网站。
当我与朋友分享我网站的页面(不是主页)的 url 时,当他在浏览器中输入它时,它会自动将他重定向到登录页面。(这是正确的行为)。当他输入他的用户名和密码时,它会重定向到主页,而不是我与他共享的 url。

我尝试Request.UrlReferrer.PathAndQuery在 login.aspx 上使用。
它仅在用户有意退出系统时才有效。

基本上,我想通过邮件或其他方式共享链接(url),用户将打开它,如果他尚未登录,他会要求登录,一旦登录,浏览器将向他显示来自 url 的页面而不是主页。

4

3 回答 3

14

在每个页面中检查用户是否登录,如果没有则

if (Session["UserName"] == null && Session["UserId"] == null) 
{
    string OriginalUrl = HttpContext.Current.Request.RawUrl; 
    string LoginPageUrl = "/login"; 
    HttpContext.Current.Response.Redirect(String.Format("{0}?ReturnUrl={1}", LoginPageUrl, OriginalUrl));
 }

并在登录页面中检查是否returnurl存在,如果returnurl存在则重定向到该页面。

if (this.Request.QueryString["ReturnUrl"] != null)
{
  this.Response.Redirect(Request.QueryString["ReturnUrl"].ToString());
}
else
{
  this.Response.Redirect("/account/default");
}
于 2015-11-27T16:40:22.357 回答
9

如果您使用表单身份验证,则可以ReturnUrl在登录页面中使用查询字符串:

var returnUrl = Request.QueryString["ReturnURL"];
if (string.IsNullOrEmpty(returnUrl)){
   returnUrl = "~/";
}
Response.Redirect(returnUrl);

如果你不使用它,你应该像它一样行事:当你将用户重定向到登录页面时,添加一个带有引用页面的查询字符串。

//**Remember to url encode it!**
var returnUrl = Server.UrlEncode(Request.Url.PathAndQuery);
Response.Redirect("~/login.aspx?ReturnURL=" + returnUrl);
于 2013-07-15T14:08:21.877 回答
2

作为替代方案,您可以使用 cookie。我更喜欢这种方法,因为它会使地址栏更干净,看起来更优雅。该过程对用户也是透明的。这也应该可以防止一些恶意用户使用您的登录页面重定向到不需要的网站。

在重定向到登录页面的代码中:

Response.Cookies.Add(new HttpCookie("returnUrl", Request.Url.PathAndQuery));
Response.Redirect("login.aspx");

在您的登录页面中:

HttpCookie returnCookie = Request.Cookies["returnUrl"];
if((returnCookie == null) || string.IsNullOrEmpty(returnCookie.Value))
{
    Response.Redirect("Default.aspx");
}
else
{
    HttpCookie deleteCookie = new HttpCookie("returnUrl");
    deleteCookie.Expires = DateTime.Now.AddDays(-1);
    Response.Cookies.Add(deleteCookie);
    Response.Redirect(returnCookie.Value);
}

这个

注意:如果您有安全问题,您应该对返回 URL 运行一些验证。

于 2014-03-25T12:25:49.600 回答