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

Соцсеть. Куки. Урок 6.

index.php


<?php
include('./classes/DB.php');
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'];
return $userid;
}
}
return false;
}
if(isLoggedIn()) {
echo 'Logged in';
echo isLoggedIn();
} else {
echo 'Not logged in';
}
?>

Зададим вторые куки на 3 дня в фале login.php
<?php
ob_start(); // от ошибки
include('classes/DB.php');
if(isset($_POST['login'])) {
$username = $_POST['username'];
$password = $_POST['password'];
if (DB::query('SELECT username FROM users WHERE username=:username', array(':username'=>$username))) {

if (password_verify($password, DB::query('SELECT password FROM users WHERE username=:username', array(':username'=>$username))[0]['password'])) {
echo 'Logged in!';
// при входе на сайт мы генерируем токен
$cstrong = true;
$token = bin2hex(openssl_random_pseudo_bytes(64, $cstrong)); // мы генерируем 64 байта, вторым параметром передается только переменая
// echo $token; // 3df3d89336887cd8701b391ab5a8cd1b81205dcd1b9f51ed4d15815690cda971b19685bea37632c17d895bef95d2076c1d463697757a301828791ce1061ef43b
$user_id = DB::query('SELECT id FROM users WHERE username=:username', array(':username'=>$username))[0]['id'];
DB::query('INSERT INTO login_tokens VALUE (:id, :token, :user_id)', array(':id'=>null, ':token'=>sha1($token), ':user_id'=>$user_id));
setcookie("SNID", $token, time() + 60 * 60 * 24 * 7, '/', NULL, NULL, TRUE);
setcookie("SNID_", '1', time() + 60 * 60 * 24 * 3, '/', NULL, NULL, TRUE);
} else {
echo 'Incorrect Password!';
}

} else {
echo 'User not registered!';
}
}
?>

<h1>Login to your account</h1>
<form action="login.php" method="post">
<input type="text" name="username" placeholder="Username..."/> </p>
<input type="password" name="password" placeholder="Password..."/> </p>
<input type="submit" name="login" value="Login"/>
</form>


index.php
<?php
include('./classes/DB.php');
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;
}
if(isLoggedIn()) {
echo 'Logged in';
echo isLoggedIn();
} else {
echo 'Not logged in';
}
?>

Исправим регистрацию create-account.php
Исключим повторяемость имейлов.
<?php
include('classes/DB.php');

if(isset($_POST['createaccount'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
if(!DB::query('SELECT username FROM users WHERE username=:username', array(':username'=>$username))) {
if(strlen($username) >= 3 && strlen($username) <= 32) {
if(preg_match('/[a-zA-Z0-9_]+/', $username)) {
if(strlen($password) >= 6 && strlen($password) <= 60) {
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
if(!DB::query('SELECT email FROM users WHERE email=:email', array(':email'=>$email))) {
DB::query('INSERT INTO users VALUES (:id, :username, :password, :email)', array(':id'=>null, ':username'=>$username, ':password'=>password_hash($password, PASSWORD_BCRYPT), ':email'=>$email));
echo "Success!";
} else {
echo 'Email in use!';
}
} else {
echo 'Invalid email!';
}
} else {
echo 'Invalid password!';
}
} else {
echo 'Invalid username!';
}
} else {
echo 'Invalid username!';
}
} else {
echo 'User already exists!';
}
}
?>

<h1>Register</h1>
<form action="create-account.php" method="post">
<p><input type="text" name="username" placeholder="Username"/></p>
<p><input type="password" name="password" placeholder="Password"/></p>
<p><input type="email" name="email" placeholder="someone@somesite.com"/></p>
<input type="submit" name="createaccount" value="Create Account"/>
</form>


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

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

Materialize-css. Футер

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