php - Check if cookie is set -
to let users logged in, have :
- the user logs in
if ok, create $_session , set cookie :
setcookie ('test', sha1($_post['username']), time()+604800);
then insert in cookie table : hashed username, ip address , browser version.
but, in order check if user logged in (and keep him logged), have query on each page :
- i check if $_session['id'] exists (it variable user logged in)
- if exists, nothing happens.
- if doesn't, check if $_cookie['cookie'] exists
- if does, user's ip address , browser version
- with select query, check if actual ip address , browser same in table.
- if same, reset $_session (so logged in)
now, here's code :
form :
<form method="post" action="http://localhost/test/login.php"> <label for="user">username :</label> <input type="text" name="username" id="user" maxlength="20" placeholder="username"> <label for="pass">password :</label> <input type="password" name="password" id="pass" placeholder="password"> <br> <input type="checkbox" name="cookie" value="cookie">remember me ? <input type="submit" name="login" value="ok"> </form> functions :
function get_ip() { if (isset($_server['http_client_ip'])) { return $_server['http_client_ip']; } elseif (isset($_server['http_x_forwarded_for'])) { return $_server['http_x_forwarded_for']; } else { return (isset($_server['remote_addr']) ? $_server['remote_addr'] : ''); } } function getbrowser() { $u_agent = $_server['http_user_agent']; $bname = 'unknown'; $platform = 'unknown'; $version= ""; if (preg_match('/linux/i', $u_agent)) { $platform = 'linux'; } elseif (preg_match('/macintosh|mac os x/i', $u_agent)) { $platform = 'mac'; } elseif (preg_match('/windows|win32/i', $u_agent)) { $platform = 'windows'; } if(preg_match('/msie/i',$u_agent) && !preg_match('/opera/i',$u_agent)) { $bname = 'internet explorer'; $ub = "msie"; } elseif(preg_match('/firefox/i',$u_agent)) { $bname = 'mozilla firefox'; $ub = "firefox"; } elseif(preg_match('/chrome/i',$u_agent)) { $bname = 'google chrome'; $ub = "chrome"; } elseif(preg_match('/safari/i',$u_agent)) { $bname = 'apple safari'; $ub = "safari"; } elseif(preg_match('/opera/i',$u_agent)) { $bname = 'opera'; $ub = "opera"; } elseif(preg_match('/netscape/i',$u_agent)) { $bname = 'netscape'; $ub = "netscape"; } $known = array('version', $ub, 'other'); $pattern = '#(?<browser>' . join('|', $known) . ')[/ ]+(?<version>[0-9.|a-za-z.]*)#'; if (!preg_match_all($pattern, $u_agent, $matches)) { } $i = count($matches['browser']); if ($i != 1) { if (strripos($u_agent,"version") < strripos($u_agent,$ub)){ $version= $matches['version'][0]; } else { $version= $matches['version'][1]; } } else { $version= $matches['version'][0]; } if ($version==null || $version=="") {$version="?";} return array( 'useragent' => $u_agent, 'name' => $bname, 'version' => $version, 'platform' => $platform, 'pattern' => $pattern ); } on submit :
if (!empty($_post['pseudo']) && !empty($_post['password'])) { $salt = "salt_test"; $req = $bdd->prepare('select * users username = :username , pass = :pass'); $req->execute(array('username' => $_post['username'], 'pass' => md5(sha1($_post['pass'].$salt)))); if ($data = $req->fetch()) { if ($data['stat'] != 0) { $_session['id'] = $data['id']; $_session['username'] = $data['username']; $_session['stat'] = $data['stat']; $req = $bdd->prepare('update cookies set last_co = current_timestamp id_user = :id'); $req->execute(array('id' => $data['id'])); $req->closecursor(); if(!empty($_post['cookie'])) { setcookie ('cookie', md5($_post['username']), time()+604800); $ua = getbrowser(); $yourbrowser= $ua['name']. " " .$ua['version']; $req = $bdd->prepare('update cookies set hash_username = :hash_username, ip = :ip, browser = :browser id_user = :id'); $req->execute(array('hash_username' => md5($_session['pseudo']), 'ip' => get_ip(), 'browser' => $yourbrowser, 'id' => $_session['id'])); $req->closecursor(); } ?><meta http-equiv="refresh" content="0.1; url=http://localhost/test/" /><?php } elseif ($data['stat'] == 5) { $error = 2; } } else { $error = 1; } $req->closecursor(); } on members page :
if (isset($_session['id'])) { if (isset($_cookie['cookie']) { $ip = get_ip(); $yourbrowser= $ua['name']. " " .$ua['version']; $req = $bdd->prepare('select * cookies hash_username = :hash, ip = :ip, browser = :browser'); $req->execute(array('hash_username' => md5($_session['username']), 'ip' => $ip, 'browser' => $yourbrowser)); if ($req->fetch()) { $_session['id'] = $data['id']; $_session['username'] = $data['username']; $_session['stat'] = $data['stat']; } $req->closecursor(); } } so, method ok , heavy performance. don't think "useless" make query every time ?
make new page code
if (isset($_session['id'])) { if (isset($_cookie['cookie']) { $ip = get_ip(); $yourbrowser= $ua['name']. " " .$ua['version']; $req = $bdd->prepare('select * cookies hash_username = :hash, ip = :ip, browser = :browser'); $req->execute(array('hash_username' => md5($_session['username']), 'ip' => $ip, 'browser' => $yourbrowser)); if ($req->fetch()) { $_session['id'] = $data['id']; $_session['username'] = $data['username']; $_session['stat'] = $data['stat']; } $req->closecursor(); } } and include in every page . after not need write code again , again.
Comments
Post a Comment