Avatar billede webweaver Praktikant
11. oktober 2005 - 20:22 Der er 12 kommentarer og
1 løsning

Problemer med loginsystem og sessions

Hey there..

Jeg har nogle problemer, og umiddelbart kan jeg ikke finde fejlen. Jeg har lavet selve login delen, og man kan logge sig på og så videre, sessions bliver registreret og jeg har også fået det til at virke, med de sider som skal være beskyttede. Men dog alligevel ikke helt. Det er fordi, jeg har ikke, som mange andre en side hvor man logger ind, men jeg har til gengæld min login form, included på alle siderne. Se evt. www.webweaver.dk. Og meningen er så at når man logger ind, skal der i stedet for login formlen vises enten admin menu eller bruger menu, afhængig af hvem der logger ind. Det har jeg også lavet, sådan så det virker når man logger på. Men, når jeg så skifter til at anden side på sitet. Altså klikker på et link.. Så viser den lige pludselig formen igen på den side, ligesom før man loggede ind. Og det er selvfølgelig ikke meningen. Menuen skal jo gerne blive der. Og det er så her jeg ikke forstår, hvorfor det ikke virker, fordi jeg har testet at den gemmer mine sessions ordentligt, og det gør den, fordi jeg kan sagtens se den beskyttede side og udskrive session'en.. Det er kun den include login form/menu, der fejler.. Det får mig til at tro, at fejlen ligger et sted i min function_tjek_login.php fil, som er en anden fil jeg includer på alle sider, som jeg bruger til at tjekke om man er logget ind og til at finde ud af hvilken menu som skal vises ude i siden.

Håber I forstod den lange besværlige forklaring ;) Ellers må I lige sige til! .. Men her har I lige min kode til de forskellige filer..

menu/login:

$username = $_POST['username'];
$password = md5($_POST['password']);
               
$connect = mysql_connect("********", "********", "********") or die("Der kunne ikke oprettes forbindelse til databasen lige nu. Prøv igen senere.");
mysql_select_db("**********", $connect) or die("Databasen blev ikke fundet!");
                               
$foresp = mysql_query("SELECT * FROM Profil WHERE brugernavn = '".$username."'", $connect) or die("Data blev ikke hentet ud af databasen!");
               
while($data = mysql_fetch_array($foresp)) {
                               
$brugernavn = $data['brugernavn'];
$kodeord = $data['kodeord'];
$admin = $data['admin'];
}
               
if (isset($_POST['login'])) {
               
if ($username == $brugernavn && $password == $kodeord && $admin == 1) {
$_SESSION["username"] = $username;
$_SESSION["logged_in"] = TRUE;
$_SESSION["admin"] = TRUE;
} elseif ($username == $brugernavn && $password == $kodeord) {
$_SESSION["username"] = $username;
$_SESSION["logged_in"] = TRUE;
}
}
               
if (menu_tjek_login_admin()) {
echo "admin menu";
} elseif (menu_tjek_login()) {
echo "bruger menu";
} elseif (!menu_tjek_login_admin() || !menu_tjek_login()) {
?>
               
<form method="post"  action="<? echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="login">
Username : <input type="text" name="username"><br />
Password : <input type="password" name="password"><br />
<input type="submit" value="Login">
</form>
               
<?
}
?>

function_tjek_login.php:

<?
session_start();
       
function tjek_login() {
if (isset($_SESSION['username']) && $_SESSION['logged_in'] == TRUE) {
return true;
} else {
header("location:http://www.jubii.dk");
return false;
}
}
       
function tjek_login_admin() {
if (isset($_SESSION['username']) && $_SESSION['logged_in'] == TRUE && $_SESSION['admin'] == TRUE) {
return true;
} else {
header("location:http://www.jubii.dk");
return false;
}
}
       
function menu_tjek_login_admin() {
if (isset($_SESSION['username']) && $_SESSION['logged_in'] == TRUE && $_SESSION['admin'] == TRUE) {
return true;
}
}
       
function menu_tjek_login() {
if (isset($_SESSION['username']) && $_SESSION['logged_in'] == TRUE) {
return true;
}
}       
?>

Kan I se fejlen nogle steder?

På forhånd tak :)

Mvh. Lasse Jensen
Avatar billede unsafe Nybegynder
12. oktober 2005 - 02:43 #1
session_start(); i toppen af siderne ;-)?

Du kan jo evt lave et dokument der hedder session.php der indeholder

<?php

session_start();

?>

Og include det på alle sider.

Eksempel: include("session.php");
Avatar billede Slettet bruger
12. oktober 2005 - 08:51 #2
unsafe: jeg tror ikke lige jeg kan se den smarte idé i, at inkludere en fil udelukkende med en linie. det gør det da ikke mere overskueligt at have det i en fil, medmindre man også skal samle en masse andet i den.
Avatar billede showsource Seniormester
12. oktober 2005 - 09:09 #3
Jeg ville nu nok lave det lidt anderledes.
Først ville jeg lave en fil til at logge ind med, og redirecte tilbage.
For at kunneredirecte korrekt tilbage kan bruges et hiddenfelt med værdien $_SERVER["REQUEST_URI"]

I filen med loginform/menu kan du blot bruge, (den includes jo, så session_start() er sat )

<?php
if(!isset($_SESSION["username"], $_SESSION["logged_in"])) {
?>

<form method="post"  action="/logind.php">
<input type="hidden" name="login">
<input type="hidden" name="back" value="<?php echo $_SERVER["REQUEST_URI"]; ?>">
Username : <input type="text" name="username"><br />
Password : <input type="password" name="password"><br />
<input type="submit" value="Login">
</form>

<?php
}else{

    if(isset($_SESSION["admin"])) {
    echo"Admin menu";
    }else{
    echo"Bruger menu";
    }
}
?>
Avatar billede unsafe Nybegynder
12. oktober 2005 - 16:30 #4
Gandso: Gør jeg, eller ikke helt, har en session_start(); i min functions.php som jeg har includet på alle side.
Avatar billede webweaver Praktikant
12. oktober 2005 - 17:25 #5
Til Unsafe:

Jamen der er jo også session_start(); i topppen af alle sider? ;) Der ligger jo en session_start(); i function_tjek_login.php, og den fil bliver jo included i toppen af alle sider, inden menuen bliver included...

Showsource: Ja man kan også gøre det på den måde som du viser. Men jeg kan ikke helt forstå, hvorfor jeg skal bruge $_SERVER["REQUEST_URI"]?

Men kan I stadig fortælle mig hvorfor det ikke virker på den måde jeg har lavet det på, da jeg gerne vil beholde mine funktioner?

På forhånd tak :)

Mvh. Lasse Jensen
Avatar billede webweaver Praktikant
14. oktober 2005 - 08:32 #6
I ved ikke hvorfor det ikke virker på måden jeg gør det på?
Avatar billede showsource Seniormester
14. oktober 2005 - 08:45 #7
Det med $_SERVER["REQUEST_URI"] var for at uanset hvilken side brugeren er på, ville han blive sendt tilbage til samme side.

Det er lid tsvært at overskue hvad du egentlig gør.

Men koden duviser for menu/login, er det en fil som includes?
Det er jo fjollet at lave en query hvis der ikke er submittet fra en form.

Og tjek_login.php, hvor kommer den ind henne?
Avatar billede webweaver Praktikant
14. oktober 2005 - 09:15 #8
menu/login den bliver included på alle sider.. Og det samme gør function_tjek_login.php. Den bliver included i toppen af alle sider, før den anden fil bliver included.
Avatar billede showsource Seniormester
14. oktober 2005 - 09:38 #9
Hvis nu du satte flg. i topppen på function_tjek_login.php
<?php
ini_set('ERROR_REPORTING', "E_ALL");

session_start();

// o.s.v.

?>

ville du formodentlig få fejlmeddelser!

Men igen, ville nok lave det lidt anderledes.
Vil tro det ikke rigtig virker fordi du på alle sider går ud fra at der er postet fra en form.
Avatar billede webweaver Praktikant
14. oktober 2005 - 13:32 #10
Angående det med formen, så kan jeg vel bare flytte:

if (isset($_POST['login'])) {

længere op, sådan så der ikke bliver udført nogen query, før man har klikket "Login" på formen.
Avatar billede webweaver Praktikant
14. oktober 2005 - 13:34 #11
Hvis jeg sætter ini_set('ERROR_REPORTING', "E_ALL"); så får jeg alligevel ingen fejlmeddelelser. Der sker slet ingen forskel, om den er der eller ej.
Avatar billede webweaver Praktikant
23. oktober 2005 - 11:17 #12
Jeg forstår det simpelthen ikke! :'( Selvom jeg gør på den henviste måde:

<?php
if(!isset($_SESSION["username"], $_SESSION["logged_in"])) {
?>

<form method="post"  action="/logind.php">
<input type="hidden" name="login">
<input type="hidden" name="back" value="<?php echo $_SERVER["REQUEST_URI"]; ?>">
Username : <input type="text" name="username"><br />
Password : <input type="password" name="password"><br />
<input type="submit" value="Login">
</form>

<?php
}else{

    if(isset($_SESSION["admin"])) {
    echo"Admin menu";
    }else{
    echo"Bruger menu";
    }
}
?>

Så virker det stadig ikke! Der kommer stadig den samme fejl! :( Hvad sker der!?
Avatar billede webweaver Praktikant
14. december 2005 - 00:17 #13
Ja så må jeg jo selv prøve at kigge videre på det...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester