Переход с php на js, идеологическая сторона

216
16 июля 2017, 12:38

Всем привет. Да, понимаю, что в названии примерно то же, что и сравнивать корову с баней, но я хочу понять именно идеологическую сторону. Вопросы напишу по порядку, заранее спасибо!

  • Что касается сессий. На php сравнительно просто - при авторизации можно добавить в $_SESSION значение $_SESSION['user_id'] и вуаля, сессия в безопасности. Что делать на js? К примеру, есть сайт, нужно вывести кнопку со ссылкой на аккаунт пользователя, если человек залогинен и кнопку входа, если нет. На php реализовывалось легко - проверка $_SESSION['user_id'], затем вывод нужного блока, а как это сделать на JS? Понимаю, что можно при каждом обновлении страницы делать AJAX-запрос на backend о существовании пользователя, но где данные о пользователе хранить, чтобы они защищены были?
  • Правильно ли я понимаю, что backend на node.js в разы производительнее, чем на php5.x?

P.S. вопросов оказалось немного, поскольку из ответов на эти вопросы уже буду понимать, куда дальше копать.

Answer 1

немного поясню: к примеру, человек залогинился. Как вывести на front-end, залогинен он или нет, и, если залогинен, вывести его ник, ссылку на него и т.д.? Написать функцию на back-end'e, где проверять, есть у него $_SESSION['user_id'] или нет и возвращать это все в json, а из json уже на back-end выводить кнопку "регистрация/вход" или "Мой аккаунт"

Пишешь на php контролер, который будет просто возвращать данные в JSON. Например проверяешь сессию, пользователь залогинен(присутствует $SESSION['user_id']) -> получаешь все нужные данные данные (ник, ссылку на него и т.д) -> пакуешь в JSON -> отправляешь его ответом -> в фрон энде распаковываешь данные и распихиваешь куда нужно. Либо же можно уже готовую разметку отделных блоков в JSON пихать и заменять их потом на клиенте. Если же в сессии ничего нет, просто отправляешь false.
пример:

/**
     * Получает данные о продукте из базы
     * 
     */
    Product.prototype.getData = function (page) {
        var self = this;
        var link = location.protocol + '//' + location.hostname + '/design/ajax/get_product_ajax.php';
        var xhr = new XMLHttpRequest;
        var body = 'id=' + encodeURIComponent(this.id) + '&' + 'page=' + encodeURIComponent(page);
        xhr.open("POST", link, true);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
                self.data = JSON.parse(xhr.responseText);
            }
        }
        xhr.send(body);
    }

И контролер

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        if ($_POST['id']) {
            session_start();
            // логика......
            echo json_encode($response);
        }
    }      

Только такие манипуляции придется делать при переходе на любую страницу сайта.... Либо же первый раз запрос сделать, получить ответ и записать его допустим sessionStorage или LocalStorage, а уже оттуда брать инфу при переходе по страницам

READ ALSO
Узнать где пользователь сайта был ранее

Узнать где пользователь сайта был ранее

ЗдравствуйтеПри переходе на одну из страниц моего сайта (например site

238
Странная работа preg_match PHP 5.6

Странная работа preg_match PHP 5.6

Делаю регистрациюНаписал шаблоны для имени, фамилии и т

181