суббота, 23 сентября 2017 г.

Соцсеть. Login. Урок 7.

Logout.


Создадим файл logout.php
<?php
ob_start();
include('./classes/DB.php');
include('./classes/Login.php');
if(!Login::isLoggedIn()) {
die("Not logged in.");
}
if(isset($_POST['confirm'])) {
// Если установлена галочка alldevices, то удаляются все токнины для пользователя с таким id
if(isset($_POST['alldevices'])) {
DB::query('DELETE FROM login_tokens WHERE user_id=:userid', array(':userid'=>Login::isLoggedIn()));
} else { // иначе удаляется один токен с установленной кукой
if(isset($_COOKIE['SNID'])) {
DB::query('DELETE FROM login_tokens WHERE token=:token', array(':token'=>sha1($_COOKIE['SNID'])));
}
setcookie('SNID', '1', time()-3600);
setcookie('SNID_', '1', time()-3600);
}
}
?>

<h1>Logout of your Account?</h1>
<p>Are you sure you'd like to logout?</p>
<form action="logout.php" method="post">
<input type="checkbox" name="alldevices" value="alldevices"/> Logout of all devices?
<input type="submit" name="confirm" value="Confirm"/>
</form>

Создадим файл \classes\Login.php
Скопируем туда содержимое файла index.php
<?php
class Login {
public static function isLoggedIn() {
if(isset($_COOKIE['SNID'])) {
if(DB::query('SELECT user_id FROM login_tokens WHERE token=:token', array(':token'=>sha1($_COOKIE['SNID'])))) {
$userid = DB::query('SELECT user_id FROM login_tokens WHERE token=:token', array(':token'=>sha1($_COOKIE['SNID'])))[0]['user_id'];
if(isset($_COOKIE['SNID_'])) {
return $userid;
} else {
// если прошло 3 дня и куки истекли, мы генерируем токен
$cstrong = true;
$token = bin2hex(openssl_random_pseudo_bytes(64, $cstrong)); // мы генерируем 64 байта, вторым параметром передается только переменая
DB::query('INSERT INTO login_tokens VALUE (:id, :token, :user_id)', array(':id'=>null, ':token'=>sha1($token), ':user_id'=>$userid));
DB::query('DELETE FROM login_tokens WHERE token=:token', array(':token'=>sha1($_COOKIE['SNID'])));
setcookie("SNID", $token, time() + 60 * 60 * 24 * 7, '/', NULL, NULL, TRUE);
setcookie("SNID_", '1', time() + 60 * 60 * 24 * 3, '/', NULL, NULL, TRUE);
return $userid;
}
}
}
return false;
}
}


?>


Теперь файл index.php выглядит так:

<?php
include('./classes/DB.php');
include('./classes/Login.php');
if(Login::isLoggedIn()) {
echo 'Logged in';
echo Login::isLoggedIn();
} else {
echo 'Not logged in';
}

?>

Комментариев нет:

Отправить комментарий

Materialize-css. Футер

Сделаем футер и прижмем к низу страницы. Документация: https://materializecss.com/footer.html