Ciao ragazzi sto creando una classe che mi serve per gestire la login con ricorda per un sito che sto facendo.
Purtroppo non funziona. Non dà errori, ma 1 se apro un'altra scheda senza fare logout non sembra leggere la sessione, 2 non si ricorda della login col cookie. Posto il codice della classe magari potete aiutarmi a correggerla (e ovviamente se avete migliorie da proporre sono tutto orecchie):
Codice PHP:
class User
{
//gestore db
private $mMysqli;
private $user_id=0;
public $loggato=false;
private $magicWord="wll";
//costruttore
function __construct(){
//connessione al db
$this->mMysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
$this->checkRicorda();
$this->checkLoggato();
}//fine __construct
//distruttore, chiude connessioen al db in caso ci dimenticassimo
function __destruct(){
$this->mMysqli->close();
}//fine __destruct
//funzione di controllo della login
function doLogin($username, $password, $remember) {
//per sicurezza DB eseguiamo escape di user e pass
$username = $this->exeEscape($username);
$password = $this->exeEscape(md5($password));
//eseguiamo la query per vedere se user e pass sono corretti
$sql = "SELECT * FROM `user` WHERE `username`='".$username."' AND `password`='".$password."'";
$result = $this->mMysqli->query($sql);
if(is_object($result)){
$this->setSession($result->fetch_assoc(), $remember);
//return true;
}/*else{
return false;
}*/
}
//funzione che esegue gli escape di mysql
function exeEscape($string){
$string=$this->mMysqli->real_escape_string($string);
return $string;
}
//funzione per settare la login
function setSession($values, $remember){
$this->user_id = $values['user_id'];
$cookie=$values['password'].$this->magicWord;
$_SESSION['uid'] = $this->user_id;
$_SESSION['username'] = $values['username'];
$_SESSION['cookie'] = md5($cookie);
$this->loggato=true;
if($remember){
$this->setCookie($cookie);
}
}
//funzione per l'aggiornamento del cookie
function setCookie($cookie){
$cookie=$_SESSION['username'].",,,,".$cookie;
setcookie('wll', $cookie, time() + 31104000);
}
//controlliamo la login
function checkLoggato(){
if(isset($_SESSION['uid'])){
$tmpid=$_SESSION['uid'];
$tmpuser=$_SESSION['username'];
$tmpcookie=$_SESSION['cookie'];
$sql="SELECT * FROM `user` WHERE `username`='".$tmpuser."' AND `user_id`=".$tmpid." AND md5( CONCAT( `password`,'".$this->magicWord."' ) ) = '".$tmpcookie."'";
$result = $this->mMysqli->query($sql);
if(is_object($result)){
$this->user_id=$tmpid;
$this->loggato=true;
}
}
}
//controlliamo se doveva essere ricordato
function checkRicorda(){
//controlliamo se esiste il cookie
if(isset($_COOKIE['wll'])){
list($username, $cookie) = explode(",,,,",$_COOKIE['wll']);
if(!$username or !$cookie) return;
$username = $this->exeEscape($username);
$cookie = $this->exeEscape($cookie);
$sql = "SELECT * FROM `user` WHERE `username`='".$username."' AND md5( CONCAT( `password`,'".$this->magicWord."' ) ) = '".$cookie."'";
$result = $this->mMysqli->query($sql);
if(is_object($result)){
$this->setSession($result->fetch_assoc(), true);
}else{
$this->logout();
}
}
}
//eseguiamo il logout
function logout(){
session_destroy();
setcookie('wll', '');
}
}