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';
}
?>
Комментариев нет:
Отправить комментарий