webForumDet fria alternativet

Automatisk inloggning sturlar

.NET

14 svar · 909 visningar · startad av thevice

Medlem sedan dec. 2005198 inlägg
Frågan#1

Hej!

Jag har försökt göra en automatiskt inloggning men det vill sig inte. Jag får inget felmeddelande eller något men man loggas inte in automatiskt.
Min kaka sätts som och den finns. Men de rätta värdena, så vad gör jag för fel?

Jag har en "BasePage" som jag inkluderar på alla sidor och i BasePage.cs´s PreInit så kollar jag om man är inloggad och om kakorna har något värde. Har de det så loggas man in. Men något går snett.

Kan det vara att jag kollar om man har man är inloggad osv i min BasePage? Eller att de ligger i PreInit?

Här har ni min kod:

if ((Convert.ToString(Session["intID"]) == null) && !(Request.Cookies["cUserName"] == null) && !(Request.Cookies["cPassword"] == null) && !Page.IsPostBack)
{			
	using (MySqlConnection objConnection = new MySqlConnection(ConfigurationManager.AppSettings["DatabaseConnection"]))
	{
		objConnection.Open();
		using (MySqlCommand objCommand = objConnection.CreateCommand())
		{
			objCommand.CommandText = "sp_MemberLogin";
			objCommand.CommandType = CommandType.StoredProcedure;

			objCommand.Parameters.Add(new MySqlParameter("in_Username", Convert.ToString(Response.Cookies["cUserName"].Value)));
			objCommand.Parameters.Add(new MySqlParameter("in_Password", Convert.ToString(Response.Cookies["cPassword"].Value)));
			objCommand.Parameters.Add(new MySqlParameter("in_LastLogin", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
			objCommand.Parameters.Add(new MySqlParameter("in_IP", Convert.ToString(Request.ServerVariables["REMOTE_ADDR"])));

			using (MySqlDataReader objDataReader = objCommand.ExecuteReader())
			{
				if (objDataReader.HasRows)
				{
					objDataReader.Read();
					if (Convert.ToInt32(objDataReader["intBanned"]) == 0)
					{
						Session.Add("intID", Convert.ToInt32(objDataReader["intID"]));
						Session.Add("strRole", Convert.ToString(objDataReader["strRole"]));
						Session.Timeout = 60;
					}
					else
					{
						Session.Add("intBanned", "1");
						Response.Redirect("banned.aspx");
					}
				}
			}
		}
		objConnection.Close();
	}
	Response.Redirect("Default.aspx");
}

Tacksam för all hjälp!
/ Timmie

Medlem sedan dec. 2005198 inlägg
#2

Kan det vara några problem med hur jag sätter min cookie?

Response.Cookies["cUserName"].Value = Convert.ToString(tbUsername.Text);
Response.Cookies["cUserName"].Expires = DateTime.Now.AddYears(30);
Response.Cookies["cPassword"].Value = Convert.ToString(tbPassword.Text.ToString());
Response.Cookies["cPassword"].Expires = DateTime.Now.AddYears(30);
Medlem sedan juli 2004206 inlägg
#3

Men... kör du inte VS.Net 2003/2005 så du kan debugga och stega igenom och se precis vad som händer?

Medlem sedan dec. 2005198 inlägg
#4

Tycker detta är riktigt stört. När jag debuggar så fungerar det. Jag kör jämt ctrl + f5. Men om jag laddar upp sidan på mitt webbhotell så fungerar det inte.
Hur ska jag lösa detta?

Medlem sedan dec. 19996 721 inlägg
#5

Använd Trace

http://msdn2.microsoft.com/en-us/library/y13fw6we(VS.71).aspx

Medlem sedan dec. 2005198 inlägg
#6

Jag måste har gjort något fel när jag kollade om det fungerar med debugging. För det gör det inte nu.
Kakan finns om jag använder trace och kollar på Response Cookie men inte i Request Cookie?

Medlem sedan dec. 19996 721 inlägg
#7

Kakan dyker inte upp i Request förrän vid nästa sidhämtning.

Kakan sätts väl från samma domän?

Medlem sedan dec. 2005198 inlägg
#8

Okej, japp det gör den.
Jag testade att skriva ut den på sidan och då så kommer kakans värde fram. Vad är det som är fel?

Medlem sedan dec. 2005198 inlägg
#9

Nu har jag testat lite. Om jag tar bort (Convert.ToString(Session["intID"]) == null) så fungerar det.
Eller nja inte riktigt fungerar jag får detta i Firefox trots att jag tillåter kakor på denna sida:
Firefox har upptäckt att servern dirigerar om förfrågan om den här platsen på ett sätt som omöjliggör ett slutförande.
Det här problemet kan ibland uppstå om du avaktiverat eller nekat att ta
emot kakor.

Medlem sedan dec. 2005198 inlägg
#10

Eftersom att ingenting fungerade när jag hade "Session["intID"]) == null" i denna kod rad:

if ((Convert.ToString(Session["intID"]) == null) && !(Request.Cookies["cUserName"] == null) && !(Request.Cookies["cPassword"] == null) && !Page.IsPostBack)

Så tog jag ju bort det och fick det felet som jag skrev i mitt förra inlägg.
Men jag måste ju självklart kolla ifall man är inloggad eller inte. Så jag tänkte göra något så här:

if (!(Convert.ToString(Session["intID"]) == null) && !Page.IsPostBack)
{
  // Gör lite saker om man är inloggad
}
else
{
  if ((Request.Cookies["cUserName"] != null) && (Request.Cookies["cPassword"] != null) && !Page.IsPostBack)
  {
    // Loggar in om man har kryssat i det.
  }
}

Men det vill sig inte heller. Då börjar jag om från början igen. Vad är det för något jag gör fel? Läser jag av min kaka fel? Sätter jag min kaka fel?

Medlem sedan dec. 2005198 inlägg
#11

Är det ingen som har någon idé om vad som kan vara fel?

Medlem sedan dec. 2005198 inlägg
#12

Jag har fortfarande inte löst problemet. Något måste jag har gjort fel, någon som sitter inne med en artikel eller liknande hur man fixar det automatiskt inloggning utan forms authentication?

Medlem sedan dec. 20014 239 inlägg
#13

Vet inte om det behövs men för mig som kör med Forms login så behöver jag sätta

timeout="1209600"

i Forms taggen i Web.Config för att den automatiskt ska logga in. Kanske är det något sådant som behövs även för dig?

Inte svar på din fråga men kanske en puff i rätt riktning.

Medlem sedan dec. 2005198 inlägg
#14

Hejsan,
Jag testade att lägga dit detta i web.config. Kanske något som kan ändras/läggas dit där för det ska fungera?

    <authentication mode="Windows">
      <forms cookieless="AutoDetect" timeout="1209600" domain="http://www.llife.se" enableCrossAppRedirects="true" />
    </authentication>

Kan man annars göra något i global.asax för att inloggningen ska kunna fungera?

Medlem sedan dec. 20014 239 inlägg
#15

thevice skrev:

Hejsan,
Jag testade att lägga dit detta i web.config. Kanske något som kan ändras/läggas dit där för det ska fungera?

    <authentication mode="Windows">
      <forms cookieless="AutoDetect" timeout="1209600" domain="http://www.llife.se" enableCrossAppRedirects="true" />
    </authentication>

plocka bort "http://www." Det ska endast vara domännamnet.

    <authentication mode="Windows">
      <forms cookieless="AutoDetect" timeout="1209600" domain="llife.se" enableCrossAppRedirects="true" />
    </authentication>
319 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
193 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)