17. oktober 2003 - 03:27Der er
15 kommentarer og 1 løsning
fejl med login system (cookies, sessions og mysql)
heysan fokes
jeg har lavet et login system med cookies og sessions!
der er er 1 lille fejl :( ret så provokerende
det er når jeg logger ind så ændre den ikke den login boks til ens admin menu den viser bare login boksen og når man skriver adr'en til ens admin menu i adr boksen så virker den, men den skal includes når man logger ind :(
ved ikke hvad der kan være galt, det virker fint et andet sted på min apache server, men når jeg direkte kopiere det med sql og det hele så fungere det ikke :(
nogen som kan hjælpe
mine filer er sådan her:
sql'en: CREATE TABLE brugere ( id int(11) NOT NULL auto_increment, username varchar(100) NOT NULL default '', PASSWORD varchar(100) NOT NULL default '', LEVEL enum('1','2','3') NOT NULL default '1', PRIMARY KEY (id) ) TYPE=MyISAM;
min login.php: <?php session_start(); include("db.inc"); ?> <form action="?vis=check&login=yes" method="post"> <font size="1" color="black" face="Verdana">Username:</font><br> <font style="font:bold 10px verdana;"></font> <input type="text" name="username" style="background:#A0BBD0;border:1px solid black;font:bold 10px verdana;" size="10"><br> <font style="font:bold 10px verdana;"></font> <font size="1" color="black" face="Verdana">Password:</font><br> <input type="password" name="password" style="background:#A0BBD0;border:1px solid black;font:bold 10px verdana;" size="10"><br> <input type="checkbox" name="husk" value="ja" border="0" onClick="return(confirm('OBS: Hvis du sidder ved en offentlig computer, netcafé el. lign., \nkan det ikke anbefales at bruge denne funktion'))"> husk mig <br style="font-size: 5px"> <input type="submit" name="submit" value="Log ind" style="background:#A0BBD0;border:1px solid black;font:bold 10px verdana;"> </form>
min loggedin.php (den fil som skal includes når man loggerind):
<?php session_start(); $res = mysql_query("SELECT * from brugere where username = '$username'"); session_register("user"); $user = mysql_fetch_array($res); echo "du er nu logget ind som " . $_SESSION['user']['username'] . "<br>"; echo "du er level " . $_SESSION['user']['level'] . "<br>"; ?>
check.php (den fil som checker det hele):
<?php session_start(); session_register("session_id()", "username", "password"); include "db.inc"; if($_GET['login'] == "yes") { if ($_POST['husk']=="ja") { $res = mysql_query("SELECT * from brugere where username = '$username'"); $p = mysql_fetch_array($res); if($p[username] == $username && $p[password] == $password && $username != "" && $password != "") { setcookie ("username", "$username", time()+31536000, "/"); // set cookie 365 dage setcookie ("password", "$password", time()+31536000, "/"); }else { setcookie ("username", "$username", 0, "/"); // set cookie 0 dage (slettes ved browserluk) setcookie ("password", "$password", 0, "/"); } header("Location: ?vis=nyheder"); }else { echo "$_SESSION[username] findes ikke prøv igen"; } } ?>
db.inc indholder en connection til mysql databasen!
jeg bruger ?p=<side> til at komme rundt på lidt nemmere for mig at arbejde med
håber nogen kan hjælpe mig med mit prob for det er altså ret så provokerende kan ikke bygge videre på det uden den fejl er rettet
!!!
lige 1 ting til, min logout til den, den virker heller ik den sletter ikke cookien :(
den ser således ud:
<?php session_start(); $end = session_destroy(); setcookie("username", "0", "/"); if ($end) { header("Location: ?p=nyheder"); } else { echo "Du kunne ikke logges ud"; } ?>
Du blander måden du sætter sessions på Brug enten session_register eller $_SESSION[]
check.php
<?php session_start(); if (isset($_POST["login"])) { include("db.inc"); $res = mysql_query("SELECT * from `brugere` where `username` = '". $_POST["username"] ."' AND `password` = '". $_POST["password"] ."'") or die (mysql_error());
if (mysql_num_rows($res) == 0) { echo"Fejl i brugernavn eller password"; exit; }else{ $p = mysql_fetch_array($res); $_SESSION["user"]["id"] = session_id(); $_SESSION["user"]["username"] = $p["username"]; $_SESSION["user"]["password"] = md5($p["password"]); $_SESSION["user"]["level"] = $p["level"];
if(isset($_POST["husk"])) { setcookie ("username", $_SESSION["username"], (time()+31536000), "/"); // set cookie 365 dage setcookie ("password", $_SESSION["password"], (time()+31536000), "/"); }else{ setcookie ("username", "", (time()-3600)); // set cookie 0 dage (slettes ved browserluk) setcookie ("password", "", (time()-3600)); } } header("Location:?vis=nyheder"); } ?>
I loggedin.php kunne du nøjes med:
<?php //Ingen session_start() da det jo er en includefil, og du derfor har startet sessions if(isset($_SESSION["user"])) { echo"Hej ". $_SESSION["user]["username"] ."<br>\n"; echo"Du er level ". $_SESSION["user"]["level"]; } ?>
medmindre du selvf. vil tjekke op med DB'en hvergang en side loades :O)
Og din logout: Her skal vel ikke sættes en cookie, hvis man gerne vil huskes til næste gang? <?php session_start(); $_SESSION[] = array(); session_destroy(); header("Location:?p=nyheder"); exit; ?>
sukos, hmm det virker ik, http://me.zyxep.dk/webradio/ <-- og så prøv at login med brugeren admin med passet admin, den virker ik, den sender ik en videre eller logger ind! før loggede den mig ind men includede ikke :(
hvis jeg skifter if (isset($_POST["login"])) ud med if($_GET['login'] == "yes") så virker den! men den includer stadig ikke loggedin.php ved login boksen, koden ved det er
<? $query = mysql_query("SELECT * FROM brugere WHERE username='$username'") or die ("Kunne ikke vælge felter i database-tabellen"); $p = mysql_fetch_array($query); if($p[username] == $username && $p[password] == $password && $username != "" && $password != "") { include("loggedin.php"); }else{ include("login.php"); } ?>
sukos, kan du lave det i det design som jeg sendte til dig, ? for så ville du være gud :P så får du point, det er faktisk det her jeg har ønsket mig, men ville jo selv gerne lave det :P men f... det
Skal gå nu, men hvis du sender et dump af din DB, vil jeg kikke på det i morgen! :O) Men vil helt klart kræve en del ændringer i opbygningen af din side
Var ikke på igår, og er nu egentlig ikke lige til at lave det for dig! :O)
Forslag: 1. Brug en includefil til at starte sessions, connecte til DB m.m. 2. Submit din(e) form(s) til en anden fil end index.php 3. Hvis du vil tjekke en session op mod din DB, så gør det med en funktion som returnerer true eller false. 4. Dit tjek på om en fil findes, kan jo bruges til at hente filer fra alle mulige steder! Det bør rettes!
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.