Gå til innhold

Problemer med oppsett av session for innlogging


Anbefalte innlegg

Heisann, nok en gang kommer jeg hit for å få litt hjelp.

Har søkt litt rundt, men har vel i prinsippet ikke funnet informasjonen som jeg leter etter.

 

Jeg driver å skriver ett nettsted sammen med noen andre folk, og frem til nå så har innlogging og sessions fungert fint. Før så har dog min del av siden (forum), ligget i en mappe for seg selv, og innlogging og slikt, har ligget i den mappa.

Nå skal dog innloggingsskjermen være på forsiden, og ikke gjelde kun for forumet. Det eneste som i prinsippet har blitt endret er plasseringen på de fysiske filene, samt adressene til disse. Nå bruker jeg også en del absolutte adresser (typ: http://......), det har jeg heller ikke gjort før, men mener det ikke bør ha noe å si (uten at jeg har lest dette noe sted). Dette er fordi vi vil kun ha en loginskjerm, og en header som er felles for alle siden våre. loginboksen ligger i headeren, og session_start() ligger nå i connection.php.

Det som er litt sært er at når jeg logger inn, så har den en redirect til hovedsia, og da skal i prinsippet loginboksen bli gjort om til en "du er logget inn"-boks, Men det skjer ikke, samme innloggings formen som kommer opp (altså du er ikke logget inn). I loginscriptet (rett før det eneste stedet den redirecter, så har jeg en $_SESSION['signed_in'] == true. Og det er også den sjekken som skal gjennomføres når den bestemmer om det er innlogging eller userbox som skal komme opp. Men når du allikevel da velger å logge inn igjen (fordi det ikke funka forrige gang), får man beskjed om at du allerede er logget inn og du kan da evt. logge ut.

 

Jeg skjønner ikke hvor jeg skal begynne engang. Har noen noe tips! Jeg veit ikke hvilken info som er relevant, og det er derfor jeg ikke har posta med noen kode her.

Lenke til kommentar
Videoannonse
Annonse

Heisann, nok en gang kommer jeg hit for å få litt hjelp.

Har søkt litt rundt, men har vel i prinsippet ikke funnet informasjonen som jeg leter etter.

 

Jeg driver å skriver ett nettsted sammen med noen andre folk, og frem til nå så har innlogging og sessions fungert fint. Før så har dog min del av siden (forum), ligget i en mappe for seg selv, og innlogging og slikt, har ligget i den mappa.

Nå skal dog innloggingsskjermen være på forsiden, og ikke gjelde kun for forumet. Det eneste som i prinsippet har blitt endret er plasseringen på de fysiske filene, samt adressene til disse. Nå bruker jeg også en del absolutte adresser (typ: http://......), det har jeg heller ikke gjort før, men mener det ikke bør ha noe å si (uten at jeg har lest dette noe sted). Dette er fordi vi vil kun ha en loginskjerm, og en header som er felles for alle siden våre. loginboksen ligger i headeren, og session_start() ligger nå i connection.php.

Det som er litt sært er at når jeg logger inn, så har den en redirect til hovedsia, og da skal i prinsippet loginboksen bli gjort om til en "du er logget inn"-boks, Men det skjer ikke, samme innloggings formen som kommer opp (altså du er ikke logget inn). I loginscriptet (rett før det eneste stedet den redirecter, så har jeg en $_SESSION['signed_in'] == true. Og det er også den sjekken som skal gjennomføres når den bestemmer om det er innlogging eller userbox som skal komme opp. Men når du allikevel da velger å logge inn igjen (fordi det ikke funka forrige gang), får man beskjed om at du allerede er logget inn og du kan da evt. logge ut.

 

Jeg skjønner ikke hvor jeg skal begynne engang. Har noen noe tips! Jeg veit ikke hvilken info som er relevant, og det er derfor jeg ikke har posta med noen kode her.

 

Så du starter session på et domene og sjekker om den er satt på et annet?

Du kan jo begynne med å sjekke hva $_SESSION['signed_in'] inneholder.

var_dump($_SESSION['signed_in']);

Lenke til kommentar

Altså nei. Jeg starter en session idet vi logger inn (domenet er det samme, men loginboksen ligger i en header, som skal brukes overalt (i alle undermapper o.l.).

Av en eller annen grunn blir resultatet av var_dump($_SESSION['signed_in']); = NULL, der hvor den ikke klarer å hente at brukeren er logget inn (logisk nok i og for seg). Men hvis jeg kaller opp den loginboksen manuellt (ikke include), så sier den "bool(true)". Enda en ting jeg ser nå er at der hvor scriptet skal si "Hei $brukernavn" så henter den databasenavnet. Henger ikke helt med. Er det noen spesifikk kode du vil se? Har skrivd så mye frem og tilbake nå, at jeg nesten ikke veit hvor jeg er hen x)

Lenke til kommentar

Altså nei. Jeg starter en session idet vi logger inn (domenet er det samme, men loginboksen ligger i en header, som skal brukes overalt (i alle undermapper o.l.).

Av en eller annen grunn blir resultatet av var_dump($_SESSION['signed_in']); = NULL, der hvor den ikke klarer å hente at brukeren er logget inn (logisk nok i og for seg). Men hvis jeg kaller opp den loginboksen manuellt (ikke include), så sier den "bool(true)". Enda en ting jeg ser nå er at der hvor scriptet skal si "Hei $brukernavn" så henter den databasenavnet. Henger ikke helt med. Er det noen spesifikk kode du vil se? Har skrivd så mye frem og tilbake nå, at jeg nesten ikke veit hvor jeg er hen x)

 

Connection.php (session_start) blir den inkludert FØR header (loginboksen) og på alle andre sider?

Er du sikker på at logginn-scriptet fungerer? Post login-scriptet og der du sjekker om brukeren er logget inn.

Lenke til kommentar

conn.php blir henta øverst i header, som er includa i alle filene som skal synes. Ellers er conn includa manuelt.

 

Dette er den koden som sjekker om du er online. Denne ligger i mappen www/funksjoner

 

<?php
//onlinecheck
include ('conn.php');
echo var_dump($_SESSION['signed_in']);

echo '<div id="userbox">';
if ($_SESSION['signed_in']==true)
{
echo'<div class="formwraplogged">
		<div class="leftformwraplogged">
			<div class="loggedtekst"><p>Hei ' . $_SESSION['username'] . '</p></div>
			<div class=clear></div>
			<div class="loggedtekst"><p>Status: '; include ('rankcheck.php'); echo'</p></div>
			<div class=clear></div>';
if ($_SESSION['userlevel'] > 1)
{
	echo 	'<div class="loggedtekst">
				<p><a href="---------------.php">Administrator Panel</a></p>
			</div>';
}
echo'	</div>
		<div class="rightformwrap">
			<form method="post" action="signout.php"><input type="submit" class="thebutton" name="logout" value="Logg ut"/></form>
		</div>
	</div>';
}
else
{
echo 	'<form method="post" action="http://ijava.no/funksjoner/signin.php">
			<div class="formwrap">
				<div class="leftformwrap">
					<div class="label">Brukernavn:</div><div class="form"><input type="text" class="smallfields" name="brukernavn" /></div>
					<div class="clear"></div>
					<div class="label">Passord:</div> <div class="form"><input type="password" class="smallfields" name="passord" /></div>
					<div class="clear"></div>
				</div>
				<div class="rightformwrap">
					<div class=formbutton><input type="submit" class="thebutton" name="login" value="Logg inn"/></div>
				</div>
				<div class="clear"></div>
				<div class="register"><p>Ikke medlem? <a href="http://ijava.no/funksjoner/signup.php"> REGISTRER DEG</a> NÅ!</p></div>
			</div>
		</form>';
}
echo '</div>';
?>

 

Her har vi loginscriptet (dette fungerte tidligere idag, ar gjort minimale endringer (altså endra "veien" til conn.)). Denne ligger også i www/funksjoner.

Jeg prøver å logge inn fra index.php som ligger i www, (den includer onlinecheck, som videre includer signin.php.

 

<?php
include ('conn.php');
//signin.php

//først sjekker vi om brukeren allerede er logga inn. 
//Hvis brukeren er det er det ikke noen vits i å vise innloggingside.

if(isset($_SESSION['signed_in']) && $_SESSION['signed_in']==true)
{
echo 'Du er allerede logget inn, du kan evt <a href="http://ijava.no/funksjoner/signout.php">logge ut</a>.';	
}
// Du er altså ikke logget inn.
else
{
if($_SERVER['REQUEST_METHOD'] != 'POST')
{
}
else
{
	if(isset($_POST['login']))
	{
		// Noe har blitt postet. Vi går igjennom postinga i tre steg
		//	1. Sjekker dataene
		//	2. Lar brukeren fylle inn på nytt dersom noe skulle være galt
		//	3. Sjekker at datene er korrekt, og returnerer "riktig svar"

		$errors = array(); 	// Lager en array som feilmeldinger kan lagres i 
							//og vises dersom det er noe i den,
		// Sjekker at brukernavn-feltet ikke er tomt.					
		if(!isset($_POST['brukernavn']))
		{
			$errors[] = 'du må skrive inn ett brukernavn';
		}

		// Sjekker at passord-feltet ikke er tomt.
		if(!isset($_POST['passord']))
		{
			$errors[] = 'du må skrive inn ett passord';
		}

		// Hvis ikke errors arrayen er tom vil du få listet opp feilene dine.
		if(!empty($errors))
		{
			echo 'Du mangler ett eller flere felter';
			echo '<ul>';
			foreach($errors as $key => $value)
			{
				echo '<li>' . $value . '</li>';
			}
			echo '</ul>';
		}
		else
		{
			// Skjemaet har blitt fylt ut uten feil, så vi vil sjekke dataene mot databasen.
			$sql = 	"	SELECT 
							id, 
							username, 
							userlevel 
						FROM 
							users 
						WHERE 
							username = '" . mysql_real_escape_string($_POST['brukernavn']) . "'
						AND	
							password = '" . md5($_POST['passord']) . "'";

			$result = mysql_query($sql);


			if(!$result)
			{
				//Noe gikk galt. Vis feilmelding
				echo 'Noe gikk galt med innloggingsprosessen. Venligst prøv igjen senere.';
				//echo mysql_error(); // For debugging. Kommenter ut når du ikke trenger den.
			}
			else
			{
				// Hvis vi har kommet hit, kan det ha skjedd to ting
				// 1. Spørringen mot databasen returnerte korrekt data, og brukeren kan logge inn.
				// 2. Spørringen mot databasen returnerte ikke korrekt data, brukeren skreiv noe feil.
				if (mysql_num_rows($result) == 0)
				{
					echo '<div id="loginerror"><p>Du har skrevet inn feil brukernavn eller passord. Prøv igjen</p></div>';
				}

				else
				{

					//setter $_SESSION['signed_in'] variabelen til TRUE
					$_SESSION['signed_in'] = true;

					// Vi legger id, username og userlvl inn i $_SESSION, så vi kan bruke verdiene på alle sidene.
					while($row = mysql_fetch_assoc($result))
					{
						$_SESSION['id'] = $row['id'];
						$_SESSION['username'] = $row['username'];
						$_SESSION['userlevel'] = $row['userlevel'];
					}
					// SENDER TIL IJAVA.NO, FIKSE TIL CURRENT PAGE
					echo '<meta http-equiv="refresh" content="0;url=../index.php">';
					//echo 	'Logger inn';

				}
			}
		}
	}
}
//include ('closeconn.php');
}	


Endret av LimeCut
Lenke til kommentar

Det kan være at conn.php ikke blir inkludert.

 

Prøv følgende der den inkluderes:

if(!include('conn.php')) die('Kunne ikke inkludere fil!');

 

Slå på feilmeldinger også og se om du får noen:

ini_set('display_errors', 1);
error_reporting(E_ALL);

 

Har du noe HTML kode før session_start() noen steder?

Lenke til kommentar

Jeg har prøvd å legge inn den koden (både istedenfor, og etter include conn.php).

Det gjør ingen forskjell. Det ligger da foreløbig slik i headeren (som er det første som blir inkludert, annet enn i de filene som ikke har noe "design".

<?php 
ini_set('display_errors', 1);
error_reporting(E_ALL);
include ('conn.php'); 
session_start();
?>

Under denna koden så kommer alt html styret.

 

session_start(); ligger nå ikke i conn.php lengere (det gjorde den før).

 

 

Dobbeltsjekka og la til en session_start() på toppen av loginscriptet (rett under conn.php). og fikk en feilmelding når jeg prøvde å logge ut (fordi når jeg logga inn for andre gang, sa den at jeg allerede var logga inn.

feilmeldingen lyder: trying to destroy uninitialized session in /www. Jeg skjønner ikke helt greia. Databasen ligger dog på et annet domene, men er ikke med localhost som adresse det blir hentet, kan det være ett problem? (selv om det har funka før?).

Endret av LimeCut
Lenke til kommentar

Databasen ligger dog på et annet domene, men er ikke med localhost som adresse det blir hentet, kan det være ett problem? (selv om det har funka før?).

 

Så lenge du har rett link i tilkoblingen skal det fungere. Men du skulle blitt informert om det var feil info oppgitt. Du kan jo prøve å printe ut et eller annet fra databasen og se om det virker.

 

Sjekka du at conn faktisk blir inkludert?

Lenke til kommentar

Databasen ligger dog på et annet domene, men er ikke med localhost som adresse det blir hentet, kan det være ett problem? (selv om det har funka før?).

 

Så lenge du har rett link i tilkoblingen skal det fungere. Men du skulle blitt informert om det var feil info oppgitt. Du kan jo prøve å printe ut et eller annet fra databasen og se om det virker.

 

Sjekka du at conn faktisk blir inkludert?

 

Den må jo nesten det siden noen ganger når jeg kaller den onlinechecken så får jeg infoen men KUN i den fila, ikke hvis jeg har includa den.. så jeg veit ikke helt... Blir nok til at jeg skriver om hele scriptet på nytt. hadde uansett gjort seg.. x)

Lenke til kommentar

Bare erstatt

include ('conn.php');

med

if(!include('conn.php')) die('Kunne ikke inkludere fil!');  

så ser du om den blir inkludert.

 

Den hadde det når jeg prøvde det ja.. nå er jeg dog usikker, fordi jeg har begynt å skrive om. Prøver å skrive om hele greia en gang til, regner med jeg er tilbake her på lørdagskveld/natt til søndag, dersom det ikke løser seg x)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...