Как вставить в таблицу после успешного входа в сеанс - PullRequest
0 голосов
/ 04 января 2019

Я делаю сценарий входа в систему с простой функцией управления сеансом, такой как Facebook

Для начала я создал таблицу с именем "users_sessions"

Это код:

$database->query("
    CREATE TABLE `users_sessions` (
        `session_id` int(10) UNSIGNED NOT NULL,
        `session_date` datetime NOT NULL,
        `user_id` int(10) UNSIGNED NOT NULL,
        `user_browser` varchar(64) COLLATE utf8mb4_bin NOT NULL,
        `user_os` varchar(64) COLLATE utf8mb4_bin NOT NULL,
        `user_ip` varchar(64) COLLATE utf8mb4_bin NOT NULL,
         PRIMARY KEY (`session_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
");

Итак, я хочу, чтобы, когда пользователи автоматически заполняли в поле правильное имя пользователя и пароль, скрипт вставлял в эту таблицу нужную информацию из успешного журнала пользователя.

и это index.php:

 $_POST['password'] = User::hash_password($_POST['password']);
if(!empty($_POST) && empty($_SESSION['error'])) {
    /* If remember me is checked, log the user with cookies for 30 days else, remember just with a session */
    if(isset($_POST['rememberme'])) {
        setcookie('username', $_POST['username'], time()+60*60*24*30);
        setcookie('password', $_POST['password'], time()+60*60*24*30);
        setcookie('user_id', User::login($_POST['username'], $_POST['password']), time()+60*60*24*30);


    } else {
        $_SESSION['user_id'] = User::login($_POST['username'], $_POST['password']);
    }
    redirect();
}

И это моя конфигурация базы данных:

<?php

/* CONNECTION */
$database_connection = new StdClass();
$database_connection->server = 'localhost';
$database_connection->username = 'root';
$database_connection->password = '';
$database_connection->name = 'wearesocio';
$database = new mysqli($database_connection->server, $database_connection->username, $database_connection->password, $database_connection->name);
if($database->connect_error) {

    header('Location: '.$_SERVER['PHP_URL']."install");
}

/* DB CLASS */
Database::$database = $database;
/* DEBUGGING */
define('DEBUGGING', true);

?>

Ответы [ 3 ]

0 голосов
/ 05 января 2019
if(isset($_POST['rememberme'])) {
    setcookie('username', $_POST['username'], time()+60*60*24*30);
    setcookie('password', $_POST['password'], time()+60*60*24*30);
    setcookie('user_id', User::login($_POST['username'], $_POST['password']), time()+60*60*24*30);
    insert_into_db($params);
} else {
    $_SESSION['user_id'] = User::login($_POST['username'], $_POST['password']);
    insert_into_db($params);
}

function insert_into_db($params){
    // write insert query
}

В идеальном мире я бы использовал PDO со связанными параметрами в функции вставки, имел бы каждую таблицу с установленными PRIMARY_KEYs и очищал пользовательский ввод. И, конечно же, хеш-пароли перед хранением согласно Как использовать password_hash

UPDATE

if(!empty($_POST) && empty($_SESSION['error'])) {
    $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
    $password_raw = $_POST['password'];

    // Get these data
    $session_params = array();
    $session_id = 1;
    $session_date = time();
    $user_id = User::login($username, $password_raw);
    $user_browser = '';
    $user_os = '';
    $user_ip = '';
    array_push($session_params, $session_id, $session_date, $user_id, $user_browser, $user_os, $user_ip);

    if(isset($_POST['rememberme'])) {
        setcookie('username', $username, time()+60*60*24*30);
        //setcookie('password', $_POST['password'], time()+60*60*24*30);
        setcookie('user_id', $user_id, time()+60*60*24*30);
        insert_session_into_db($session_params);
    } else {
        $_SESSION['user_id'] = $user_id;
        insert_session_into_db($session_params);
    }
    redirect();
}

function insert_session_into_db($session_params)
{
    // include database config file, or instantiate your Database class here

    extract($session_params);

    $sql = "INSERT INTO users_sessions (session_id, session_date, user_id, user_browser, user_os, user_ip)
            VALUES ('".$session_id."', '".$session_date."', '".$user_id."', '".user_os."', '".$user_ip."')";
    $res = $database->query($sql);
    if ($res === true) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $database->error;
    }
    $database->close();
}
0 голосов
/ 23 января 2019

это моё решение

Я создал несколько функций для получения пользовательского браузера или IP-адреса пользователя и т. Д. Затем создайте эту функцию ниже, чтобы добавить ее после $_SESSION['user_id']

    function insert_into_users_sessions($user_id){
    // here add your database class name
    global $database;

    $user = $_SESSION['user_id'];
    $date = new DateTime();
    $date = $date->format('Y-m-d H:i:s');
    $user_browser = get_user_browser();
    $user_ip = get_user_ip();
    $user_os = get_user_os();

    @$database->query("INSERT INTO `user_sessions` (`user_id`, `session_ip`, `session_os`, `session_browser`, `session_date`) VALUES ('$user', '$user_ip', '$user_os', '$user_browser', '$date')");

}
0 голосов
/ 05 января 2019

например, вы можете добавить его в конце метода login ()

public static login(){

  // you put the login logic here 


     // when the user login info are correct
     if(login == true ){

      // add the user to users_sessions

     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...