Problema session_regenerate_id

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori

Avatar utilizator
mfwsro
Average Member
Mesaje: 188
Membru din: Mie Dec 03, 2008 1:03 pm
Contact:

Problema session_regenerate_id

Mesajde mfwsro » Mie Aug 03, 2011 9:12 am

Salut, doresc cateva sfaturi sau eventual idei, modificari in urmatorul cod:

Pagina login.php:
session_start() ;
$res = informatiile care le extrage din baza de date
session_regenerate_id( true ) ; // de ce nu, nocache sau false in loc de true?
$item = mysql_fetch_assoc( $res ) ;
$_SESSION['nume'] = $item['nume'] ;
session_write_close() ;
header( "Location: member.php" ) ;
exit();


Pagina member.php:
session_start() ;
if ( ! isset( $_SESSION['nume'] ) || ( trim( $_SESSION['nume'] ) == '' ) ) {
$_SESSION = array() ;
session_destroy() ;
header( "Refresh: 3; url=./" ) ;
echo "Eroare, nu esti autentificat\n" ;
exit() ;
}
echo "Bine ai venit " . $_SESSION['nume'] ;


Pagina logout.php:
session_start() ;
session_unset() ;
session_destroy() ;
session_regenerate_id( true ) ;
session_write_close() ;
header( "Location: ./" ) ;



Configuratie htaccess:
php_value session.gc_maxlifetime 300
php_value session.cookie_lifetime 0
php_value display_errors Off
php_value log_errors Off
php_value register_globals Off
php_value register_argc_argv Off
php_value magic_quotes_gpc Off
php_value magic_quotes_runtime Off
php_value magic_quotes_sybase Off



Problema este ca de pe telefon dupa ce ma loghez si intru pe pagina member.php ma da afara, mi se sterge sesiunea (cred), de pe ultima versiune de firefox am momente cand patesc la fel cum patesc cand sunt pe mobil.Am testat si cu Explorer 6.0 si culmea nu am nici o problema.Gresesc ceva in cod sau e nevoie sa aleg alta sesiune, am considerat ca session_regenerate_id e mai sigura.Mentionez cam am vps propriu. iar versiunea de php este 5.3.6



oceans
Senior Member
Mesaje: 504
Membru din: Mar Noi 13, 2007 3:06 pm

Mesajde oceans » Mie Aug 03, 2011 9:53 am

Ce domeniu ai pe mobile ? Sau ai subdomeniu ? In orice caz exista posibilitatea cookie-urile sa fie setate in zone diferite. Incearca sa pui in member.php inainte de session_start():

Cod: Selectaţi tot

ini_set("session.cookie_domain", ".domeniu.ro");

Avatar utilizator
mfwsro
Average Member
Mesaje: 188
Membru din: Mie Dec 03, 2008 1:03 pm
Contact:

Mesajde mfwsro » Mie Aug 03, 2011 10:14 am

Acelasi cod, aceeasi configuratie este implementata pe un alt domeniu al meu www.tinytop.mobi gazduit pe server shared de la o firma de hosting si nu am absolut nici-o problema.Domeniul cu problema de pe vps este www.inbuzunar.mobi

oceans
Senior Member
Mesaje: 504
Membru din: Mar Noi 13, 2007 3:06 pm

Mesajde oceans » Mie Aug 03, 2011 10:27 am

Da cum am spus problema in mod normal este de la accesarea fisierelor cookie distincte. Daca ai incercat cu session.cookie_domain si nu ti-a mers incearca sa vezi unde se salveaza sesiunile. Pune asta in login.php si in member.php

Cod: Selectaţi tot

echo session_save_path();
Si vezi daca sunt la fel.

Avatar utilizator
mfwsro
Average Member
Mesaje: 188
Membru din: Mie Dec 03, 2008 1:03 pm
Contact:

Mesajde mfwsro » Mie Aug 03, 2011 10:34 am

Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in /home/inbuzuna/public_html/login.php on line 85

oceans
Senior Member
Mesaje: 504
Membru din: Mar Noi 13, 2007 3:06 pm

Mesajde oceans » Mie Aug 03, 2011 10:43 am

Nu ai postat codul cu session_destroy() din login.php

Ai incercat ce ti-am sugerat ?

Avatar utilizator
mfwsro
Average Member
Mesaje: 188
Membru din: Mie Dec 03, 2008 1:03 pm
Contact:

Mesajde mfwsro » Mie Aug 03, 2011 10:45 am

Am adaugat echo session_save_path(); si mi-a aparut eroarea de mai sus.Sa fie oare de la faptul ca sub formularul de logare am bagat session_unset() ; si session_destroy() ; ca sa nu se logheze de mai multe ori pe acelasi cont?

Avatar utilizator
kleampa
Senior Member
Mesaje: 2774
Membru din: Dum Iul 10, 2005 2:12 pm
Localitate: Bucuresti
Contact:

Mesajde kleampa » Mie Aug 03, 2011 10:55 am

in logout e suficiente session_start si session_destroy

oceans
Senior Member
Mesaje: 504
Membru din: Mar Noi 13, 2007 3:06 pm

Mesajde oceans » Mie Aug 03, 2011 11:04 am

Eu presupun ca partea care ai postat-o initial din login.php este dupa ce ai facut verificarea parolei. Daca am presupus gresit atunci posteaza index.php sau partile relevante. Daca am presupus corect atunci faptul ca ai pus unset si destroy dupa formular nu are vreo relevanta in problema ta. Insa daca am ajuns aici, userul tot se va putea loga chiar daca ai unset si destroy dupa formular. Daca vrei sa nu se logheze ori setezi in sesiune $_SESSION['logat'] = true; dar nu recomand din moment ce foloseste de atatea ori destroy. Sau folosesti baza de date si creezi un tabel useri_online in care la campul `status` de exemplu pui true si poti sa creezi si un mesaj customatizat cand incearca sa se logheze a doua oara.

Acum sa revenim la problema. Pune codul in echo session_save_path(); in login.php in loc de header( "Location: member.php" ) ; sau poti sa folosesti file_put_contents(). Care ti-e mai convenabil. Ideea este sa vedem unde se salveaza sesiunea pe VPS-ul tau.

Avatar utilizator
mfwsro
Average Member
Mesaje: 188
Membru din: Mie Dec 03, 2008 1:03 pm
Contact:

Mesajde mfwsro » Mie Aug 03, 2011 11:09 am

Da ai presupus bine codul este dupa ce citeste parola si vrea sa intre in meniu.Gata am scos destroy si unset din login si imi citeste unde se salveaza sesiunea: /tmp
Cu file_put_contents mi-a dat eroarea asta:
Warning: file_put_contents() expects at least 2 parameters, 0 given in /home/inbuzunar/public_html/login.php on line 41

oceans
Senior Member
Mesaje: 504
Membru din: Mar Noi 13, 2007 3:06 pm

Mesajde oceans » Mie Aug 03, 2011 11:24 am

ok pune asa in login.php pana in header( "Location: member.php" ) ;

Cod: Selectaţi tot

file_put_contents('login.txt', $_SERVER['SERVER_NAME'].' - '.session_save_path());


Si pune codul urmator in member.php in urmatoarea linie dupa session_start();

Cod: Selectaţi tot

file_put_contents('member.txt', $_SERVER['SERVER_NAME'].' - '.session_save_path());


Posteaza ce s-a salvat in ambele login.txt si member.txt

Avatar utilizator
mfwsro
Average Member
Mesaje: 188
Membru din: Mie Dec 03, 2008 1:03 pm
Contact:

Mesajde mfwsro » Mie Aug 03, 2011 11:28 am

In login mi-a dat la fel: inbuzunar.mobi - /tmp
In member: inbuzunar.mobi - /tmp
In member dupa ce am dat refresh m-a deconectat.

oceans
Senior Member
Mesaje: 504
Membru din: Mar Noi 13, 2007 3:06 pm

Mesajde oceans » Mie Aug 03, 2011 11:43 am

Deci te logheaza dar dupa ce dai refresh te da afara ? Atunci problema e de la cod. Initial tu ai spus ca atunci cand intri pe member.php te da afara direct.

Vezi sa nu folosesti session_unset() sau session_destroy() pe undeva prin member.php

Avatar utilizator
mfwsro
Average Member
Mesaje: 188
Membru din: Mie Dec 03, 2008 1:03 pm
Contact:

Mesajde mfwsro » Mie Aug 03, 2011 11:57 am

Adevarul este ca am dar am dezactivat si optiunea asta si tot la fel.
else
if ( $go == "logout" ) {
session_destroy() ;
header( "Location: ./" ) ;
exit() ;
}

malahistul
PHPRomania Supporter
Mesaje: 11
Membru din: Dum Feb 22, 2009 10:54 pm

Mesajde malahistul » Vin Aug 05, 2011 7:55 pm

incearca sa nu folosesti session_destroy / session_unset / session_regenerate_id si in schimb sa creezi o noua variabila, sa zicem $_SESSION['autentificat'], cu valoare true/false in functie de statusul logat/nelogat (pe care sa o modifici dupa cum e necesar in fisierele pe care le-ai expus anterior)


Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 11 vizitatori