Problema login

allora ragazzi... io sono partito da questa funzione ke funziona perfettamente per il login:

<?php 

//dati per il login 

$login_user="m3xican"; 

$pass_user="189bbbb00c5f1fb7fba9ad9285f193d1"; //passwd="prova" 

$redirect="http://localhost:8888/forum/p1.php"; 

 

//gestione della sessione nel caso in cui i cookie sono disabilitati 

if(IsSet($_POST['PHPSESSID']) && !IsSet($_COOKIE['PHPSESSID'])) 

{ 

$PHPSESSID=$_POST['PHPSESSID']; 

header("Location: $redirect?PHPSESSID=$PHPSESSID"); //si ricarica la pagina di login 

} 



session_start(); //si inizia o continua la sessione 

 

//controllo user e passwd da login 

if(IsSet($_POST['posted_username']) && IsSet($_POST['posted_password'])) 

{ 

if($login_user==($_POST['posted_username']) && $pass_user==md5($_POST['posted_password'])) 

$_SESSION['user']=$_POST['posted_username']; 

} 

 

//creazione cookie per login automatico 

if(IsSet($_POST['ricorda']) && IsSet($_SESSION['user'])) 

{ 

$cok=md5($login_user)."%%".$pass_user; 

setcookie("sav_user",$cok,time()+31536000); 

} 

 

//logout 

if($_GET['logout']==1) 

{ 

$_SESSION=array(); // Desetta tutte le variabili di sessione. 

session_destroy(); //DISTRUGGE la sessione. 

if(IsSet($_COOKIE['sav_user'])) //se presente si distrugge il cookie di login automatico 

setcookie("sav_user",$cok,time()-31536000); 

header("Location: $redirect"); //si ricarica la pagina di login 

exit; //si termina lo script in modo da ritornare alla schermata di login 

} 

      
//controllo user e passwd da cookie 

if(IsSet($_COOKIE['sav_user'])) 

{ 

$info_cok=$_COOKIE['sav_user']; 

$cok_user=strtok($info_cok,"%%"); 

$cok_pass=strtok("%%"); 

setcookie("sav_user",$info_cok,time()+31536000); 



if($cok_user==md5($login_user) && $cok_pass==$pass_user) 

$_SESSION['user']=$login_user; 

} 



//caso in cui si vuole ricordare il login, ma i cookie sono off 

if(!IsSet($_COOKIE['PHPSESSID']) && IsSet($_POST['ricorda'])) 

 header("Location: $redirect?nocookie=1"); 

?> 

<HTML> 

<HEAD> 

</HEAD> 

<BODY> 

<?php 

      
$PHPSESSID=session_id(); 

  

if(!IsSet($_SESSION['user'])) //non siamo loggati, pagina di login 

{ 

if($_GET['nocookie']==1) //i cookie sono off e si vuole ricordare il login 

print("Spiacente, ma con i cookie disabilitati non posso fare i miracoli;)<BR> 

Attivali se vuoi ricordare il tuo login.<BR>"); 

print("<BR><BR> <FORM METHOD=POST ACTION=\"p1.php\"> 

 username: 

<INPUT TYPE=TEXT SIZE=20 NAME=posted_username><BR> 

password: 

<INPUT TYPE=PASSWORD SIZE=20 NAME=posted_password><BR> 

ricordami: <INPUT TYPE=CHECKBOX NAME=ricorda VALUE=1><BR><BR> 

 <INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=\"Loggami\"><BR>"); 

  

if(!IsSet($_COOKIE['PHPSESSID'])) //i cookie sono off, dobbiamo propagare noi il PHPSESSID 

print("<INPUT TYPE=HIDDEN NAME=PHPSESSID VALUE=$PHPSESSID>"); 

print("</FORM>"); 

} 

else //siamo loggati pagina riservata 

{ 

$username=$_SESSION['user']; 

 print("Il tuo ID ?: $PHPSESSID <BR><BR>"); 

print("Sei loggato come: $login_user<BR><BR>"); 

 print("<A HREF=\"p1.php?logout=1\">logout</A>"); 

} 
?> 

</BODY> 

</HTML>

la volevo cambiare in modo da renderla fattibile con un DB in mysql.... e ho fatto cosi:

<?php 

//dati per il login 

include 'funzdb.php';

$redirect="http://localhost:8888/forum/p.php"; 

 

//gestione della sessione nel caso in cui i cookie sono disabilitati 

if(IsSet($_POST['PHPSESSID']) && !IsSet($_COOKIE['PHPSESSID'])) 

{ 

$PHPSESSID=$_POST['PHPSESSID']; 

header("Location: $redirect?PHPSESSID=$PHPSESSID"); //si ricarica la pagina di login 

} 



session_start(); //si inizia o continua la sessione 

 

//controllo user e passwd da login 

if(IsSet($_POST['posted_username']) && IsSet($_POST['posted_password'])) 

{ $connut=connetti();

$recset=mysql_db_query("my_toog","select * from utenti") or die( "Errore query classe: " . mysql_error() );

$numrec=mysql_affected_rows();

for($i=0;$i<$numrec;$i++)

  {$login_user=mysql_result($recset,$i,"nick");
$pass_user=mysql_result($recset,$i,"pass");

echo $login_user.$pass_user."<br>";

if($login_user==($_POST['posted_username']) && $pass_user==sha1(md5($_POST['posted_password']))) {
  //inserisce in log
$_SESSION['user']=$_POST['posted_username']; 
$user=$_SESSION['user'];
$ip=$_SERVER['REMOTE_ADDR'];

  $dataEntr=@time();

   
$query = mysql_query("SELECT id FROM utenti WHERE nick='$user'",$connut) or die( "Errore ricerca pass: " . mysql_error() );

 $info = mysql_fetch_assoc($query);
$id=$info['id'];
 $ora=ora($dataEntr);

    $query1="INSERT INTO log (`idut`,`nick`,`ip`,`data`,`ora`) VALUES('$id','$user','$ip',CURDATE(),'$ora')";

   mysql_db_query("my_toog",$query1);
}

    
}
disconnetti($connut);


} 

 

//creazione cookie per login automatico 

if(IsSet($_POST['ricorda']) && IsSet($user)) 

{ 

$cok=md5($user)."%%".$_POST['posted_password']; 

setcookie("sav_user",$cok,time()+31536000); 

} 

 

//logout 

if(IsSet($_GET['logout']) && $_GET['logout']==1) 

{ 

$_SESSION=array(); // Desetta tutte le variabili di sessione. 

session_destroy(); //DISTRUGGE la sessione. 

if(IsSet($_COOKIE['sav_user'])) //se presente si distrugge il cookie di login automatico 

setcookie("sav_user",$cok,time()-31536000); 

header("Location: $redirect"); //si ricarica la pagina di login 

exit; //si termina lo script in modo da ritornare alla schermata di login 

} 

      
//controllo user e passwd da cookie 

if(IsSet($_COOKIE['sav_user'])) 

{ 

$info_cok=$_COOKIE['sav_user']; 

$cok_user=strtok($info_cok,"%%"); 

$cok_pass=strtok("%%"); 

setcookie("sav_user",$info_cok,time()+31536000); 

$connut=connetti();

$recset=mysql_db_query("my_toog","select * from utenti") or die( "Errore query classe: " . mysql_error() );

$numrec=mysql_affected_rows();

for($i=0;$i<$numrec;$i++)

  {$login_user=mysql_result($recset,$i,"nick");
$pass_user=mysql_result($recset,$i,"pass");

echo $login_user.$pass_user."<br>";

if($cok_user==md5($login_user) && $cok_pass==$pass_user) 

$_SESSION['user']=$cook_user; } 
disconnetti($connut);

} 



//caso in cui si vuole ricordare il login, ma i cookie sono off 

if(!IsSet($_COOKIE['PHPSESSID']) && IsSet($_POST['ricorda'])) 

 header("Location: $redirect?nocookie=1"); 



//ora attuale

function ora($ora)

{$ora = @time();

 $b=$ora/60;

 $sec=$ora%60;

 $c=$b/60;

 $min=$b%60;

 $ora=$c%24;



 if($ora>21)

   {if($ora==22) $ora=0;

   if($ora==23) $ora=1;

   if($ora==24) $ora=2;

   }

   else $ora=$ora+2;

 

 $tot=$ora.":".$min.":".$sec;

 

 return $tot;

 }

?> 

<HTML> 

<HEAD> 

</HEAD> 

<BODY> 

<?php 

      
$PHPSESSID=session_id(); 

  

if(!IsSet($_SESSION['user'])) //non siamo loggati, pagina di login 

{ 

if(IsSet($_GET['nocookie']) && $_GET['nocookie']==1) //i cookie sono off e si vuole ricordare il login 

print("Spiacente, ma con i cookie disabilitati non posso fare i miracoli;)<BR> 

Attivali se vuoi ricordare il tuo login.<BR>"); 

print("<BR><BR> <FORM METHOD=POST ACTION=\"p.php\"> 

 username: 

<INPUT TYPE=TEXT SIZE=20 NAME=posted_username><BR> 

password: 

<INPUT TYPE=PASSWORD SIZE=20 NAME=posted_password><BR> 

ricordami: <INPUT TYPE=CHECKBOX NAME=ricorda VALUE=1><BR><BR> 

 <INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=\"Loggami\"><BR>"); 

  

if(!IsSet($_COOKIE['PHPSESSID'])) //i cookie sono off, dobbiamo propagare noi il PHPSESSID 

print("<INPUT TYPE=HIDDEN NAME=PHPSESSID VALUE=$PHPSESSID>"); 

print("</FORM>"); 

} 

else //siamo loggati pagina riservata 

{ 

$username=$_SESSION['user']; 

 print("Il tuo ID ?: $PHPSESSID <BR><BR>"); 

print("Sei loggato come: $username<BR><BR>"); 

 print("<A HREF=\"p.php?logout=1\">logout</A>"); 

} 
?> 

</BODY> 

</HTML>

il problema è ke non mi salva nulla nel cookie (e quindi non funziona il tasto ricordami) e non funziona il logout, o meglio funziona ma nn mi rimanda alla pagina di login km dovrebbe fare.... potete aiutarmi?

inviato 9 anni fa
Mine#19
X 0 X

Per risolvere questo tipo di problemi ti consiglio di separare le varie parti del codice e di testarle singolarmente. Ad esempio prova separare il codice che verifica le credenziali dell'utente con la query. Funziona? Ok, passa alla funzionalità "ricordami". Metti il codice necessario in un piccolo script PHP e provalo separatamente, indipendentemente dall'esito del login. E così via...

 :bye:

P.S.: la gestione della sessione che viene fatta nello script è piuttosto macchinosa, poiché si preoccupa della propagazione del session ID, cosa che in realtà PHP effettua automaticamente.

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Scusami ma non e' funzionante in automatico se attivo l'opzione session.user-trans-sid nel php.ini???

risposto 9 anni fa
Pr0v4
X 0 X

Per ragioni di sicurezza la propagazione del session id dovrebbe essere fatta solo via cookie e non via URL. Ovviamente è il PHP a preoccuparsi di inviare il cookie di sessione

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda