2015-06-11 3 views
0

Я делаю страницу, на которой после авторизации логина она должна перенаправляться на целевую страницу. Я использовал мастер входа. При щелчке любых ссылок на панели навигации (если они не вошли в систему), она перенаправляется на отдельную страницу регистрации. что происходит, как только я вхожу в систему, он берет меня непосредственно на страницу регистрации вместо целевой страницы. Я включаю коды для страницы входа и web.config. Кстати, я использую Bootstrap.Перенаправление после входа в систему не работает для меня

Войти Страница:

public partial class Login : System.Web.UI.Page 
{ 
    string UserLogins = ConfigurationManager.ConnectionStrings["DB1"].ConnectionString.ToString(); 

    public static object ConfigurationManager { get; private set; } 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
    { 
     Boolean blnresult; 
     blnresult = false; 

     blnresult = Authentication(Login1.UserName, Login1.Password); 
     if (blnresult == true) 
     { 
      e.Authenticated = true; 
      Response.Redirect("LandingPage.aspx"); 
     } 
     else 
     { 
      e.Authenticated = false; 
     } 
    } 

    protected static Boolean Authentication(string usernames, string passwords) 
    { 
     string sqlcmd; 
     sqlcmd = "SELECT UName, Pwd from [SignupDB] where UName = '" + usernames + "' and Pwd = '" + passwords + "'"; 
     OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/DB1.mdb;Persist Security Info=True;Jet OLEDB:Database Password=mypassword"); 
     con.Close(); 
     con.Open(); 
     OleDbCommand cmd = new OleDbCommand(sqlcmd, con); 
     OleDbDataReader reader; 
     reader = cmd.ExecuteReader(); 
     if (reader.Read()) 
      return true; 
     else 
      return false; 
    } 
} 

web.config:

<add name="SignupDB" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot;C:\Users\admin\Documents\Visual Studio 2010\WebSites\mysite\App_Data\DB1.mdb&quot;;Persist Security Info=True;Jet OLEDB:Database Password=mypassword" providerName="System.Data.OleDb"/> 
</connectionStrings> 
<system.web> 
<authentication mode="Forms"> 
    <forms loginUrl="RegPage.aspx" name="login" protection="Validation" defaultUrl="LandingPage.aspx" cookieless="UseCookies" timeout="200" enableCrossAppRedirects="true"/> 
</authentication> 
<authorization> 
    <deny users="?"/> 
</authorization> 
+1

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

попытайтесь отлаживать событие загрузки страницы на странице «Целевая страница», чтобы убедиться, что пользователь вошел в систему. –

+1

[Правильное использование перенаправления] (http://blogs.msdn.com/b/tmarq/archive/2009/06/ 25/correct-use-of-system-web-httpresponse-redirect.aspx) – Crowcoder

ответ

1

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

private void Authenticate(string login) 
{ 
    FormsAuthentication.Initialize(); 

    var ticket = new FormsAuthenticationTicket(1, 
              login, 
              DateTime.Now, 
              DateTime.Now.AddHours(3), // time of user's session .. add more if you need 
              false, 
              null); 

    var encryptedTicket = FormsAuthentication.Encrypt(ticket); 

    if (!FormsAuthentication.CookiesSupported) 
    { 
     FormsAuthentication.SetAuthCookie(encryptedTicket, false); 
    } 
    else 
    { 
     HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 

     authCookie.Expires = ticket.Expiration; 

     System.Web.HttpContext.Current.Response.Cookies.Add(authCookie); 
    } 
} 

Вы могли бы назвать это, когда ваш Логин успеха, для образца:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
    Boolean blnresult; 
    blnresult = false; 

    blnresult = Authentication(Login1.UserName, Login1.Password); 
    if(blnresult) 
    { 
     e.Authenticated = true; 

     // authenticate using Forms Authentication 
     Authenticate(Login1.UserName); 

     Response.Redirect("LandingPage.aspx"); 
    } 
    else 
    { 
     e.Authenticated = false; 
    } 
} 

Я также сделал некоторые улучшения в вашем доступе к базе данных, чтобы убедиться, что вы закрываете соединение с базой данных:

protected static bool Authentication(string usernames, string passwords) 
{ 
    string sqlcmd = "SELECT UName, Pwd from [SignupDB] where UName = '" + usernames + "' and Pwd = '" + passwords + "'"; 

    using(OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/DB1.mdb;Persist Security Info=True;Jet OLEDB:Database Password=mypassword")) 
    { 
     con.Open(); 
     OleDbCommand cmd = new OleDbCommand(sqlcmd, con); 
     using(OleDbDataReader reader = cmd.ExecuteReader()) 
     { 
     if (reader.Read()) 
      return true; 
     else 
      return false; 

     } 
    }  
}