Vinnaren i pepparkakshustävlingen!
  • 4
  • 5
2009-10-08, 19:18
  #49
Medlem
http://drupal.org/
Citera
2009-10-08, 22:11
  #50
Medlem
Wictorixs avatar
Citat:
Ursprungligen postat av Proton
Nej jag förstår varför det inte funkar. Meningen med min SQL var att du nånstans skulle ha ett användarid sparat i sessionen istället för ett användarnamn. Användarnamnet är inte nån bra ide att försöka ha i sessionen då det inte på något sätt garanteras att vara unikt, dvs du kan ju faktiskt ha (rent hypotetiskt) 2 eller fler användare som har samma användarnamn. Betydligt bättre då att spara användarid i sessionen, i synnerhet som detta användarid borde utgöra primärnyckeln i din användartabell.

Password behöver du bara bry dej om under inloggningsfasen isf. Om användarnamnet å lösenordet hittades i databasen, starta sessionen och spara användaridt i den. Resten behövs inte längre då.

Vad min kodsnutt beträffar kan du ju naturligtvis inte bara klippa in den rätt upp å ner å tro att det funkar. session_start() tillåts normalt endast en gång per scriptexekvering. Har du den högre upp ska du inte ha den där nere. Strängliteraler i SQL måste du ha enkelfnuttar runt:
Kod:
SELECT FROM some_table WHERE name='kalle kotte' 
Hoppas det blir lite klarare för dej?

tack för svar

så om jag förstår det rätt så ska jag spara id'et i en session och inte användarnamnet och password'et?
betyder inte det att varje användare måste veta och logga in med sitt ID-nummer? Eller funkar det som så loggar man in med sitt användarnamn och lösenord, sen gör servern lite "matchmaking" och kommer fram till ens ID-nummer?
Citera
2009-10-08, 23:09
  #51
Medlem
Stardragons avatar
Citat:
Ursprungligen postat av Wictorix
tack för svar

så om jag förstår det rätt så ska jag spara id'et i en session och inte användarnamnet och password'et?
betyder inte det att varje användare måste veta och logga in med sitt ID-nummer? Eller funkar det som så loggar man in med sitt användarnamn och lösenord, sen gör servern lite "matchmaking" och kommer fram till ens ID-nummer?
Nja.. Användaren loggar in med sitt användarnamn och lösenord som vanligt. Du verifierar dessa mot databasen och samtidigt hämtar ut användarens ID. Detta ID sparar du i en session och tar med dig för framtida bruk.
Citera
2009-10-08, 23:13
  #52
Medlem
Citat:
Ursprungligen postat av Wictorix
tack för svar

så om jag förstår det rätt så ska jag spara id'et i en session och inte användarnamnet och password'et?
betyder inte det att varje användare måste veta och logga in med sitt ID-nummer? Eller funkar det som så loggar man in med sitt användarnamn och lösenord, sen gör servern lite "matchmaking" och kommer fram till ens ID-nummer?


Med risk för att jag missförstått frågan så borde det ju bara vara att göra något sådant här. Med risk för typos då koden är otestad, men du borde få ett hum om hur du kan göra.

Testa att ändra slutet i checked_login.php till detta eller något likande. Då läggs den inloggade användarens id in i $_SESSION['uid'];

Sen får du ävne bara ha med en session_start(); högs upp på varje sida vilket tidigare nämnts.

Kod:
//förutsätter att du tar ut alla värden du fått fram innan med t.ex. mysql_fetch_array();

// Register $myusername, $mypassword and redirect to file "index.php"
$_SESSION['uid'] = $result['id'];
$_SESSION['logged_in'] = true;
header("location:index.php"); 

Sedan borde du kunna använda t.ex. denna sql syntax för att ta fram användarnamn t.ex.

Kod:
<?php 
 $uid 
$_SESSION['uid'];
$uid mysql_real_escape_string($uid);
 
$sql "SELECT username FROM users WHERE userid=$uid";
__________________
Senast redigerad av Admare 2009-10-08 kl. 23:16.
Citera
2009-10-08, 23:19
  #53
Moderator
Protons avatar
Din tanke om matchmaking var den riktiga i detta fall. Betänk följande "pseudo"-kod:
Kod:
<?php
$uname 
$_POST['name'];
$passwd  $_POST['passwd'];
$uname mysql_real_escape_string($uname);
$passwd mysql_real_escape_string($passwd);

$sql "SELECT uid FROM user WHERE username = '".$uname."' AND `password`  = SHA1('".$passwd."')";
$res mysql_query($sql) or die(mysql_error());
if(
mysql_num_rows($res) > ){
        
$row mysql_fetch_row($res);
        
$uid $row['uid'];
        
session_start();
        
$_SESSION['uid'] = $uid;
}
//login successful
Som vanligt förväntas du fixa till den lite å inte bara klippa å klistra å sen svära över att det inte funkar, men principen bör ju framgå iaf.

Det som händer här är att vi först tar emot post-anropet å stoppar in det i uname å passwd respektive å sedan filtrerar desa så att de går att använda i en sql-fråga.

Därefter sätter vi ihop en sql-fråga där vi frågar efter ett uid(som i detta fall är primärnyckel i user-tabellen har vi bestämt, dvs en räknare som du säkert använt?) där villkoret username och SHA1-hashen för lösenordet finns sparat(spara ALDRIG lösen i klartext i din databas).

Om det skulle finnas en sådan kombination så startar vi sessionen och läser ut användarid från databasen och sedan sparar vi det id som en sessions-variabel. Plain and simple.

På det sättet kommer du hädanefter att alltid när du behöver ta fram användarspecifik data alltid att använda sessionsvariabeln uid eftersom vi vet att den alltid kommer vara unik, det kommer ALDRIG uppstå situationer där 2 användare har samma användarid. Dessutom slipper du ju skriva krångliga SQL-frågor utan du kan ju använda ditt userid för att ta fram all data om den inloggade användaren.

Dessutom, finns det ett användarid i sessionen vet du ju att denne användare är inloggad korrekt, eftersom sessionen startas först när vi hittat rätt kombination i databasen och vi vet dessutom att sessionsvariabeln uid aldrig kommer finnas om inte denna if har körts. Bra va?
__________________
Senast redigerad av Proton 2009-10-08 kl. 23:21.
Citera
  • 4
  • 5

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback