webForumDet fria alternativet

Session problem, inloggning.

15 svar · 608 visningar · startad av samebame

samebameMedlem sedan sep. 20108 inlägg
#1

Har med hjälp från olika källor gjort ett login och registrerings system.
Det funkar att registrera sig och logga in, men sedan när jag har loggat in och ska klicka mig vidare till "medlemssidan" så får jag upp felmeddelandet "Du måste vara inloggad!" som ni kan se i koden nedan. Jag är ingen expert inom detta men antar att det har något med session att göra, eller är jag helt ute och cyklar?

Här kommer bit kod från login.php

if ($username==$dbusername&&$password==$dbpassword)
		 {
			$_SESSION['username']=$username;
			echo "Inloggad som ".$_SESSION['username']." <a href='medlem.php'>Klicka här</a> för att gå vidare till medlemssidan.";
			
		 }
		 else
		 	echo "Fel lösenord eller kontrollera stora och små bokstäver i användarnamnet.";

och här från medlem.php

<?php

    session_start();
  
  if ($_SESSION['username'])
  {
      echo "Välkommen ".$_SESSION['username']."!<br><a href='logout.php'>Logga ut</a>";
  }
  else
      echo("Du måste vara inloggad!");

?>

Så min fråga är, finns det något fel i den bit kod ni kan se? varför får jag upp 'du måste vara inloggad'? Är jag inte kvar i samma session?

Tack på förhand

Emil WMedlem sedan mars 2009512 inlägg
#2

Gör så här istället och kolla om det funkar

 if (!isset($_SESSION['username']))
  {
echo("Du måste vara inloggad!"); 
exit;
}

Edit: missade isset

samebameMedlem sedan sep. 20108 inlägg
#3

Tack för det snabba svaret, verkar som att det funkar! :) Var det bara att sätta ut ett ! före $_SESSION alltså? Varför funkar det då?

samebameMedlem sedan sep. 20108 inlägg
#4

Märkte nu att det blir fel ändå, meningen är att man inte ska kunna gå in på medlem.php utan att vara inloggad. Verkar som jag inte är kvar i samma session ändå.

Emil WMedlem sedan mars 2009512 inlägg
#5

Nu borde det funka missade isset.

 if (!isset($_SESSION['username']))
  {
echo("Du måste vara inloggad!"); 
exit;
}
GildebrandMedlem sedan juni 2009920 inlägg
#6

Man ska inte ha något whitespace innan session_start(), då kan det bli problem =)

samebameMedlem sedan sep. 20108 inlägg
#7

Något som är skumt fortfarande, vissa gånger funkar det och då får jag upp: Välkommen 'username'. Andra gånger får jag upp Du måste vara inloggad.
Verkar som den gör som den vill lite då och då.. Någon som vet vad detta kan bero på?

GildebrandMedlem sedan juni 2009920 inlägg
#8

Visa hela koden!

PeddaMedlem sedan juni 20006 032 inlägg
#9

Det jag skriver nu kanske inte kommer göra någon skillnad för dig, men det är bra att veta ändå.

Om shortags är tillåtna i php.ini så kan det strula att ha två olika typer av variabler med samma namn då PHP kan "blanda ihop" dom.
T.ex som du har i din kod i ditt första inlägg där du har en variabel som heter $username och sen en sessions variabel som heter $_SESSION['username'].
Ta därför för vana att alltid ha olika namn på dina variabler. T.ex brukar jag alltid namnge mina sessions variabler med prefixet sess_ ($_SESSION['sess_username'])

Som sagt var, det är inte säkert att det kommer göra någon skillnad för dig. Men det är viktigt att veta att det kan påverka.

samebameMedlem sedan sep. 20108 inlägg
#10

Här kommer hela koden

index.php

<html>

  <form method='POST' action='login.php'>
    <p>Anv&auml;ndarnamn :<br>
      <input type='text' name='username'>
      <br>
<br>
      L&ouml;senord :<br>
      <input type='password' name='password'><br>
      <input type='submit' value='Logga in'>
    </p>
</form>

</html>

login.php

<?php
  
session_start();
  
  $username = $_POST['username'];
  $password = $_POST['password'];
  
  if ($username&&$password)
 {
     
     $connect = mysql_connect("***", "***", "***") or die("Gick inte att ansluta till databasen.");
     mysql_select_db("***") or die("Hittade inte databasen.");
     
     $query = mysql_query("SELECT * FROM users WHERE username='$username'");
     
     $numrows = mysql_num_rows($query);
     
     if ($numrows!=0)
     {
         
        while ($row = mysql_fetch_assoc($query))
        {
                $dbusername = $row['username'];
                $dbpassword = $row['password'];
        }
         
         
         //kolla så att uppgifterna finns i databasen
         if ($username==$dbusername&&$password==$dbpassword)
         {
            $_SESSION['username']=$username;
            echo "Inloggad! <a href='medlem.php'>Klicka här</a> för att gå vidare.";
            
         }
         else
             echo "Fel lösenord.";
         
     }
     else
         echo("Användaren existerar inte.");
     
 }
 else
     echo("Ange användarnamn och lösenord.");
  
?>

medlem.php

<?php

session_start();
  
  if ($_SESSION['username'])
      echo "Välkommen ".$_SESSION['username']."!<br><a href='logout.php'>Logga ut</a>";
  else
      echo("Du måste vara inloggad!");

?>

logout.php

<?php  

  session_start();
  session_destroy();
  
  echo "Du har blivit utloggad! <a href='index.php'>Klicka här</a> för att gå till startsidan";

?>
GildebrandMedlem sedan juni 2009920 inlägg
#11

Prova att ändra

<?php 
   
session_start();

till

<?php 
session_start();

i alla filer

samebameMedlem sedan sep. 20108 inlägg
#12

Verkar som att problemet är löst på sätt och vis, kör jag med firefox så funkar det. När jag testar i IE så blir det: du måste vara inloggad! lustigt..

GildebrandMedlem sedan juni 2009920 inlägg
#13

Ska inte ha med webbläsare att göra. PHP körs på servern, inte på klienten.

samebameMedlem sedan sep. 20108 inlägg
#14

Ja därför jag tyckte det var lustigt..
Men tack för alla svar jag får nog nöja mig såhär, funkar i firefox så antar att det är något fel med mitt IE(önsketänkande)

samebameMedlem sedan sep. 20108 inlägg
#15

Men nu åter igen märker jag att det bara fungerar ibland, oavsett webbläsare. Någon som har en lösning?

GunnarDMedlem sedan juni 20014 290 inlägg
#16

Så här brukar jag göra:

På varje sida som skall vara skyddad har jag denna raden först:

require_once($_SERVER["DOCUMENT_ROOT"]."/checklogin.php");

checklogin.php ser ut så här:

<?php
session_start();
if(!isset($_SESSION['username'])) {
        header("location:/login.phtml");
}
?>

Vilket gör att om det inte finns någon session så skickas man vidare till en login sida.

login.phtml visar en sida där man skriver in login och lösenord som man sedan kollar om det är en valid konto, om det är det så skapas en session och man skickas till första sidan.

sessionen skapas med följande kod:

session_start();
$_SESSION['username']=$username;
$_SESSION['id']=$row['id'];
echo "<p>Du är inloggad!</p>";
echo "<p>Gå till startsidan för att fortsätta.</p>";
header("location:http://www.example.se");

/red: ändrade alla kod taggar till php taggar

132 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)