Skip to content

Instantly share code, notes, and snippets.

@methodin
Created March 3, 2011 04:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save methodin/852312 to your computer and use it in GitHub Desktop.
Save methodin/852312 to your computer and use it in GitHub Desktop.
Remember me for PHP (& Mongo)
define('REMEMBER_TIMEOUT',time()+60*60*24*2);
define('REMEMBER_SALT','secretword');
define('REMEMBER_COOKIE','some_cookie_name');
function remember_me($set=false, $username='')
{
$db = mongo();
// Set the cookie and add the db record
if($set)
{
$hash = md5(($_SERVER['REMOTE_ADDR']?$_SERVER['REMOTE_ADDR']:rand().time()).$username.REMEMBER_SALT);
setcookie(REMEMBER_COOKIE,$hash,REMEMBER_TIMEOUT);
// Add the record
$db->remember->insert(array(
'user' => $_SESSION['user']['_id'],
'hash' => $hash,
'timeout' => REMEMBER_TIMEOUT
));
}
// Just attempt to read the value
else if(isset($_COOKIE[REMEMBER_COOKIE]) && !isset($_SESSION['user']))
{
$remember = $db->remember->findOne(array(
'hash' => $_COOKIE[REMEMBER_COOKIE]
));
if($remember)
{
// Get the user's record
$user = $db->user->findOne(array(
'_id' => new MongoId($remember['user'])
));
$remember['timeout'] = REMEMBER_TIMEOUT;
$db->remember->save($remember);
$_SESSION['user'] = $user;
}
}
}
...
// After session_start at the start of your script
remember_me();
...
// During login post
if($_POST['remember_me'])
{
remember_me(true,$user['username']);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment