webForumDet fria alternativet

Lite assistans med sessions...

PHP

17 svar · 871 visningar · startad av niNe

Medlem sedan maj 2005138 inlägg
Frågan#1

Tjopp!

Ny på detta med PHP, och skulle behöva lite assistans.

Har en inloggning som processas vidare till en sida som kollar av mot MySQL och sedan skickar vidare till en annan sida... Precis som en normal inloggning med andra ord... Skulle dock vilja lägga med några andra variabler till sessionen.

Har följande kod i min validering innan den skickar vidare:

session_start();
$uname = $row['name'];
$email = $row['email'];
$_SESSION['authenticated'] = true;
$_SESSION['uname'] = $uname;
$_SESSION['email'] = $email;
header("location:adm.php");

Problemet är att användarens fulla namn ($row['name']) inte skickas med till nästa sida. Skriver jag däremot:

$_SESSION['uname'] = "test";

så kommer "test" med till nästa sida.

Förmodar att jag gör något fel, precis som vanligt... Kan dock inte identifiera vad det är... Förslag?

Medlem sedan juni 20006 031 inlägg
#2

Beroende på vilka inställningar du har av php så kan det ställa till det att ha samma namn på en vanlig variabel och på en sessionvariabel.

testa:

 session_start();
$_SESSION['sess_authenticated'] = true;
$_SESSION['sess_uname'] = $row['name'];
$_SESSION['sess_email'] = $row['email'];
header("location:adm.php");
Medlem sedan maj 2005138 inlägg
#3

Tack för ditt svar. Tyvärr hjälpte det inte....
Variabeln skrivs fortfarande inte ut på nästkommande sida...

Följande kod på adm.php:

echo "Du är inloggad som: ".$_SESSION['sess_uname']

"Du är inloggad som" skrivs ut, men inte namnet. Ändrar jag till $_SESSION['sess_uname'] = "test" så kommer ju "Du är inloggad som: test" på sidan.

Medlem sedan juni 20006 031 inlägg
#4

Ok, koden som du skrev är väl inte exakt den du använder?
Antar att du har sql satsen mm mellan session_start() och dina sessions deklarationer?
Annars så är det ju klart att variabeln är tom.

Medlem sedan maj 2005138 inlägg
#5

Pedda skrev:

Ok, koden som du skrev är väl inte exakt den du använder?
Antar att du har sql satsen mm mellan session_start() och dina sessions deklarationer?
Annars så är det ju klart att variabeln är tom.

Jag har en sqlsats i min verifieringsfilen, men inte i adm.php. Måste jag ha den där också menar du?

Jag förutsatte ju att min verifiering skapade en session med mitt namn (från databasen) som jag sedan kunde skriva ut varsom, utan att blanda in sqlsatser...

Medlem sedan mars 20034 471 inlägg
#6

Varför mellanlagra i $user? Ändra till:

session_start();
$_SESSION['authenticated'] = true;
$_SESSION['uname'] = $row['name'];
$_SESSION['email'] = $row['email'];;
header("location:adm.php");
Medlem sedan juni 20006 031 inlägg
#7

niNe skrev:

Jag har en sqlsats i min verifieringsfilen, men inte i adm.php. Måste jag ha den där också menar du?

Jag förutsatte ju att min verifiering skapade en session med mitt namn (från databasen) som jag sedan kunde skriva ut varsom, utan att blanda in sqlsatser...

Nej jag menade i verifieringsfilen. I adm.php behöver du det inte.
Posta hela koden till verifieringsfilen så ska vi nog kunna hitta felet.

Medlem sedan mars 20034 471 inlägg
#8

.... Grrr trodde jag körde quote....

Medlem sedan maj 2005138 inlägg
#9

Mja, det gör jag ju...

Fullständig kod nedan (medveten om säkerhetsbristerna)

include "config.php";
$tbl="login";
mysql_connect("$host", "$username", "$password")or die("Kan inte ansluta till server"); 
mysql_select_db("$db_name")or die("Kan inte ansluta till databasen");

$usrname=$_POST['usrname']; 
$passw=$_POST['passw']; 

$sql="SELECT * FROM $tbl WHERE username='$usrname' and password='$passw'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
session_cache_expire(30);
session_start();
$uname = $row['name'];
$email = $row['email'];
$access = $row['access'];
$_SESSION['sess_authenticated'] = true;
$_SESSION['sess_uname'] = $uname;
$_SESSION['sess_email'] = $email;
$_SESSION['sess_access'] = $access;
header("location:adm.php");
}
else {
echo "Fel användarnamn eller lösenord";
}
Medlem sedan mars 20034 471 inlägg
#10

Du hämtar aldrig ut någon $row....

$sql="SELECT * FROM $tbl WHERE username='$usrname' and password='$passw'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){

session_cache_expire(30);
session_start();

$row = mysql_fetch_array($resultat); //<--- MÅSTE GÖRAS

$uname = $row['name'];
$email = $row['email'];
$access = $row['access'];
$_SESSION['sess_authenticated'] = true;
$_SESSION['sess_uname'] = $uname;
$_SESSION['sess_email'] = $email;
$_SESSION['sess_access'] = $access;
header("location:adm.php");
}
Medlem sedan juni 20014 421 inlägg
#11

SQL-injection varning.

Medlem sedan maj 2005138 inlägg
#12

colione skrev:

SQL-injection varning.

Tack för din konstruktiva kritik.... Du har varit oerhört hjälpsam!

aasah skrev:

Du hämtar aldrig ut någon $row....

La till den nu, men det hjälper tyvärr inte. Följer fortfarande inga värden...

Medlem sedan juni 20006 031 inlägg
#13

Ta bort

$row = mysql_fetch_array($resultat); //<--- MÅSTE GÖRAS

$uname = $row['name'];
$email = $row['email'];
$access = $row['access'];

och ändra deklarationen till:

$_SESSION['sess_authenticated'] = true;
$_SESSION['sess_uname'] = mysql_result($result, 0, 'name');
$_SESSION['sess_email'] = mysql_result($result, 0, 'email');
$_SESSION['sess_access'] = mysql_result($result, 0, 'access');
Medlem sedan maj 2005138 inlägg
#14

Pedda! Det blir en guldstjärna i boken ;)

Medlem sedan juni 20014 421 inlägg
#15

niNe skrev:

Tack för din konstruktiva kritik.... Du har varit oerhört hjälpsam!

det redan finns enormt mycket skrivet om just detta och hur man åtgärdar det kanske det är dags för dig att söka?

Det är alltså när du kollar användarnamn och lösenord mot databasen som detta inträffar.

Medlem sedan mars 20034 471 inlägg
#16

Colione, hur skulle du reagera om någon skrev så till dig? :q Jag tror jag anar... givet vad du svarar på...

Visst är det bra att påpeka för nya att deras kod är livsfarlig för deras databaser om de inte stoppar SQL Injections. Men ingen föds med kunskapen om vad det är. Och alla har vi varit nya någon gång... Varför länkade du inte någon av de artiklarna från början istället? Skulle det tagit så mycket längre tid?

Medlem sedan juni 20014 421 inlägg
#17

aasah skrev:

Colione, hur skulle du reagera om någon skrev så till dig? :q Jag tror jag anar... givet vad du svarar på...

Visst är det bra att påpeka för nya att deras kod är livsfarlig för deras databaser om de inte stoppar SQL Injections. Men ingen föds med kunskapen om vad det är. Och alla har vi varit nya någon gång... Varför länkade du inte någon av de artiklarna från början istället? Skulle det tagit så mycket längre tid?

På a svarar jag:
Jag skulle ha tittat på informationen och tagit till mig den.
På b svarar jag:
Man lär sig mer om man får utforska själv än att man får allt serverat på silverfat framför sig.
På c svarar jag:
Ja det hade tagit mycket längre tid än att skriva det jag skrev.
På d svarar jag (det som du numer har tagit bort):
Det kke inte var bästa sättet att värva nya medlemmar, men det kommer allt fler medlemmar som inte ger nånting tillbaka till forumet, något jag har tröttnat lite på. Dock så ser jag inget fel i mitt först inlägg som påpekade att koden han hade var lite farlig. Jag antog också att man vet vad sql är om man skriver det, därmed drog jag slutsatsen att man förstår vad SQL-injections betyder. Jag kunde ha varit utförligare, men jag valde hoppas och tror att våra medlemmar har slutledningsförmåga. All kritik måste inte vara konstruktiv.

Jag kke har en dålig dag idag och om jag tog ut det på niNe får jag be om ursäkt.

Medlem sedan mars 20034 471 inlägg
#18

colione - på det svaret säger jag (y)

256 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)