06. december 2006 - 11:44Der er
26 kommentarer og 1 løsning
Session bliver ikke sat
Jeg har den efterfølgende kode på en side. Det er et login-system, Men $_SESSION['valid_user'] bliver ikke sat, selvom jeg mener oplysningerne i MySQL-databasen stemmer med det indtastede. Har I nogen ideer til hvor jeg skal lede efter fejlen? Jeg har stirret mig blind på det efterhånden... Rasmus
session_start();
if (isset($_POST['userid']) && isset($_POST['password'])) { // if the user has just tried to log in $userid = $_POST['userid']; $password = $_POST['password'];
$db_conn = new mysqli('localhost', 'root', '', 'blog');
if (mysqli_connect_errno()) { echo 'Connection to database failed:'.mysqli_connect_error(); exit(); }
$query = 'SELECT * FROM tbl_user' ."WHERE username='$userid' " ." AND pswrd=sha1('$password')";
$result = $db_conn->query($query); if ($result->num_rows >0 ) { // if they are in the database register the user id $_SESSION['valid_user'] = $userid; } $db_conn->close(); } ?> <html> <body> <?php if (isset($_SESSION['valid_user'])) { echo 'You are logged in as: '.$_SESSION['valid_user'].' <br />'; echo '<a href="logout.php">Log out</a><br />'; } else { if (isset($userid)) { // if they've tried and failed to log in echo 'Could not log you in.<br />'; }
Danmark vil mindske afhængigheden af globale techgiganter, men det kræver mere end politiske formuleringer og strategier, understreger PROSA’s formand Niels Bertelsen.
Ja, jeg fik rodet rundt i det før... Der er begge dele i db - userID og username, men $userid på PHP-siden svarer til "username" i DB. Jeg spørger altså ikke om en int...
if (isset($_POST['userid']) && isset($_POST['password'])) { // if the user has just tried to log in $username = $_POST['userid']; $password = $_POST['password'];
$link = mysql_pconnect("localhost", "root", "") or die("Kunne ikke forbinde til server"); $db = mysql_select_db("blog", $link) or die("Kunne ikke forbinde til Database");
$query = "SELECT * FROM tbl_user WHERE username='" . $username . "' AND pswrd='" . $password . "';";
$result = mysql_query($query) or die("FEJL: " . mysql_error()); if ($result->num_rows >0 ) { // if they are in the database register the user id $_SESSION['valid_user'] = $userid; }
} ?> <html> <body> <?php if (isset($_SESSION['valid_user'])) { echo 'You are logged in as: '.$_SESSION['valid_user'].' <br />'; echo '<a href="logout.php">Log out</a><br />'; } else { if (isset($userid)) { // if they've tried and failed to log in echo 'Could not log you in.<br />'; }
hmmm... når du poster dine login informationer, laver du så dit password om til sha1? . for ellers vil du jo tjekke på om "random-password" == %¤&=("=(&"#&(&%=&(%
if (isset($_POST['userid']) && isset($_POST['password'])) { // if the user has just tried to log in $username = $_POST['userid']; $password = $_POST['password'];
$link = mysql_pconnect("localhost", "root", "") or die("Kunne ikke forbinde til server"); $db = mysql_select_db("blog", $link) or die("Kunne ikke forbinde til Database");
$query = "SELECT * FROM tbl_user WHERE username='" . $username . "' AND pswrd='" . $password . "';";
$result = mysql_query($query) or die("FEJL: " . mysql_error()); $numrows = mysql_num_rows($result); if ($numrows) { // if they are in the database register the user id $_SESSION['valid_user'] = $userid; }
} ?> <html> <body> <?php if (isset($_SESSION['valid_user'])) { echo 'You are logged in as: '.$_SESSION['valid_user'].' <br />'; echo '<a href="logout.php">Log out</a><br />'; } else {
// if they've tried and failed to log in echo 'Could not log you in.<br />'; }
Når jeg kører den udgave du lige har givet mig får jeg en parse error: Parse error: parse error, unexpected T_ELSE in F:\Programmer\Xampp\xampp\htdocs\blog\simpellogin\Edit2.php on line 38
// if they've tried and failed to log in echo 'Could not log you in.<br />'; } PARSE ERROR --> else { // they have not tried to log in yet or have logged out echo 'You are not logged in.<br />'; }
@ $db = new mysqli("localhost", "root", "" , "blog"); //opretter forbindelse til serveren med host, username, password, database
if (mysqli_connect_errno()) die('Kunne ikke oprette forbindelse til database-serveren');
$result = $db->query("SELECT * FROM tbl_user WHERE username='$username'" ); if(!$result) die('Kunne ikke udføre forespørgsel'); if($result->num_rows>0) die('Brugernavnet er optaget - Gå tilbage og vælg et andet');
jo jo.. det er der hvor du opretter dem, som gemmer deres password i DB med sha1. Lad os sige du opretter en bruger:
username: testbruger password: testpassword
så bliver passwordet jo lagt krypteret ind i DB så lad os nu bare sige det hedder "blahblahblah"... Når du så logger ind spørger du om "testpassword" == "blahblahblah" og det vil det jo ikke være.
så du skal i din forespørgsel til DB spørge om password i DB == sha1($password)
Tusind tak for din hjælp!!! Jeg har lige fundet fejlen. Dum dum fejl...
Jeg havde defineret pswrd som varchar(16) i min DB-tabel, men sha1(1234); returnerer "7110eda4d09e062aa5e4a390b0a572ac0d2c0220" ...Lidt mere end 16 tegn, ikke? Det virker som det skal nu, fordi jeg fjernede begrænsningen i antallet af tegn. Rasmus
P.S. Hvis du samler på point, så smid et svar, så får du dem, for den tid du har brugt, som tak for hjælpen :)
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.