2013-07-15 4 views
4

Я создал сайт администратора, используя веб-формы Asp.Net.
Когда я разделяю URL-адрес страницы (а не домашней страницы) моего веб-сайта с моим другом, и когда он входит в нее в своем браузере, он автоматически перенаправляет его на страницу входа. (Это правильное поведение). Когда он вводит свое имя пользователя и пароль, он перенаправляется на главную страницу, а не URL, который я поделил с ним.Перенаправление на предыдущую страницу после входа в систему

Я пробовал использовать Request.UrlReferrer.PathAndQuery на login.aspx.
Он работает только в том случае, если пользователь намеренно вышел из системы.

В принципе, я хочу предоставить ссылку (url) по почте или что-то еще, пользователь откроет ее, он попросит логин, если он еще не вошел в систему, после того, как он войдет в систему, он покажет ему страницу с url, а не домашняя страница.

ответ

9

Если вы используете Forms Authentication вы можете использовать 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); 
+0

Вы имеете в виду 'Request [" ReturnUrl "]', это тоже нулевой! – user1808827

+0

Да, используете ли вы FormsAuthentication – giammin

+0

нет, я использую простые веб-формы и 'Response.Redirect' для перенаправления на' login.aspx', если сеанс равен – user1808827

1

В качестве альтернативы вы можете использовать куки. Я предпочитаю этот метод, потому что он приводит к более чистой адресной строке и выглядит более элегантным. Также процесс прозрачен для пользователя. Это также должно помешать некоторым злоумышленникам использовать вашу страницу входа для перенаправления на нежелательные сайты.

В коде, где вы перенаправление на страницу входа в систему:

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 если у вас есть проблемы с безопасностью.

7

В каждой проверке страницы, если пользователь вошел в систему, если нет, то

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"); 
} 
Смежные вопросы