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

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

Simple Angular 2 project fails 'Unexpected reserved word' -

php - Get process resource by PID -