webForumDet fria alternativet

Lite assistans med sessions...

PHPur PHP

17 svar · 869 visningar · startad av niNe

niNeMedlem sedan maj 2005138 inlägg
#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?

PeddaMedlem sedan juni 20006 032 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");
niNeMedlem 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.

PeddaMedlem sedan juni 20006 032 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.

niNeMedlem 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...

aasahMedlem 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");
PeddaMedlem sedan juni 20006 032 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.

aasahMedlem sedan mars 20034 471 inlägg
#8

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

niNeMedlem 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";
}
aasahMedlem 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");
}
colioneMedlem sedan juni 20014 421 inlägg
#11

SQL-injection varning.

niNeMedlem 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...

PeddaMedlem sedan juni 20006 032 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');
niNeMedlem sedan maj 2005138 inlägg
#14

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

colioneMedlem 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.

aasahMedlem 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?

colioneMedlem 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.

aasahMedlem sedan mars 20034 471 inlägg
#18

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

141 ms totalt · 3 externa anrop · v20260731065814-full.363dfaf6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)