0 / 0 / 0
Регистрация: 31.05.2014
Сообщений: 17
1

Вывод обновленной сессии без перезагрузки страницы

22.08.2016, 10:17. Показов 1856. Ответов 4

Author24 — интернет-сервис помощи студентам
Добрый день! Пишу авторизацию/регистрацию на ajax/php и столкнулся с проблемой. Нигде не могу найти решения. Отправляю ajax-запрос на файл-обработчик:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$("#do_login").click (function () {
                var email = $("#email").val();
                var password = $("#password").val();
                $.ajax({
                    url: 'login_check.php',
                    type: 'POST',
                    cache: false,
                    data: {'email': email, 'password': password},
                    dataType: 'html',
                    beforeSend: function () {
                        $('#messageShow').html ("Проверяем" + "<div class='clr'></div>");
                        $('#messageShow').show();   
                    },
                    success: function(data) {
                        if (data == "Пользователь авторизован!") {
                            $('#messageShow').html ("Вы молодец!" + "<div class='clr'></div>");
                            $('#messageShow').show();                   
                        }else if (data == "Не подтверждена регистрация!") {
                            $('#modal_form').html();
                            $('#overlay').fadeIn(400, // снaчaлa плaвнo пoкaзывaем темную пoдлoжку
                            function(){ // пoсле выпoлнения предъидущей aнимaции
                                $('#modal_form') 
                                    .css('display', 'block') // убирaем у мoдaльнoгo oкнa display: none;
                                    .animate({opacity: 1, top: '50%'}, 200); // плaвнo прибaвляем прoзрaчнoсть oднoвременнo сo съезжaнием вниз
                            }); 
                        }else {
                            $('#messageShow').html (data + "<div class='clr'></div>");
                            $('#messageShow').show();   
                        }
                    }
                });
            });
Дальше обработка на php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$data = $_POST;
    $errors = array();
    session_start();
 
 
    $user = R::findOne('users', 'email = ?', array($data['email']));
 
    if ($user) {
        if (password_verify($data['password'], $user->password)) {
            if ($user->check == FALSE) {
                $errors[] = 'Не подтверждена регистрация!';
                $_SESSION['id'] = $user->id;
            }else {
                echo "Пользователь авторизован!";
            }
        }else {
            $errors[] = 'Неверный пароль!';
        }
    }else {
        $errors[] = 'Пользователь с таким E-mail не найден!';
    }
 
    sleep(3);
    if (!empty($errors)) {
        echo array_shift($errors);
    }
Ну и дальше приходит ответ через echo и в ajax'е прописано, что делать дальше
А дальше открывается модальное окно, прошу заметить, что все это происходит без перезагрузки страницы. То есть немного объясню. Мы авторизовались и запомнили в $_SESSION['íd'] id пользователя и открыли модальное окно на страницы с авторизацией. Вот это модальное окно:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div id="modal_form"><!-- Сaмo oкнo --> 
        <div class="modal_logo">
            <img src="images/logo_black.png" alt="Логотип">
            <div class="clr"></div>
            <h1>Добро пожаловать, <span><?php $user = R::load('users', $_SESSION['id']); echo $user->name;?>!</span></h1>
            <p> На Ваш адрес электронной почты было отправлено сообщение с проверочным кодом. Введите его в поле<br>ниже для подтверждения регистрации. Если на Вашей<br>почте нет этого сообщения, то мы отправим его еще раз.</p>
            <form method="POST">
                <input type="text" id="generate_code" class="f_left" maxlength="4">
                <input type="button" id="do_generate_code" value="Отправить" class="f_left">
            </form>
            <div class="clr"></div>
            <h2 id="reply">Отправить сообщение еще раз</h2>
            <div id="messageShow2" style="color: black; text-align: center; font-weight: bold; font-size: 14px;"></div>
        </div>
    </div>
    <div id="overlay"></div><!-- Пoдлoжкa -->
Думаю, что уже понятно, что там есть строка: Добро пожаловать, юзернэйм. Так вот этот юзернэйм выводится только после обновления страницы. Эо этого переменная пустая. Как это реализовать без перезагрузки? Спасибо зараннее, я не знаю, что делать...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2016, 10:17
Ответы с готовыми решениями:

Вывод данных из БД без перезагрузки страницы
Здравствуйте,помогите пожалуйста сделать вывод результата поиска в форму(rezultat) без перехода на...

Старт сессии без перезагрузки
Привет, прошу совета. Я сделал авторизацию на яаксе. Как теперь стартовать сессию без перезагрузки?...

Переделываь часть страницы без перезагрузки страницы
И так у меня есть код &lt;?php $file = &quot;./toolbar.php&quot;; $contents = file($file); $string =...

Исполнение PHP-скрипта без перезагрузки страницы и без знания JavaScript(!) - Xajax
Приветствую! Решил запостить отдельной темой, а в прилепленной (про Ajax) просто разместить на нее...

4
Заблокирован
22.08.2016, 14:20 2
Вход-то можно сделать и с перезагрузкой. Иначе сразу в ответ на корректные аутентификационные данные выдавайте данные пользователя, не дожидаясь повторного запроса. Можно и так сделать, хотя толку ноль:
to: логин, пароль
from: OK
to: давайте данные пользователя
from: данные пользователя
0
0 / 0 / 0
Регистрация: 31.05.2014
Сообщений: 17
22.08.2016, 14:51  [ТС] 3
Понимаете, у меня регистрация подтверждается через код на почте. После авторизации (если пользователь успешно подтвердил регистрацию идёт редирект на основной сайт и там проблем нет), но если человек зарегистрирован, но не подтвердил регистрацию, то вход на сайт ему закрыт. Ему открывается модальное окно с инпутом для ввода кода и кнопкой для отправки кода ещё раз. Так вот почему-то при повторном запросе на проверку кода или на его отправку айди считывается из сессии и все в бд меняется замечательно, на почту также все приходит, но именно сначала переменная сессии не обновляется. Приложу картинку, может так поймёте. Это все делается без обновления страницы...
Миниатюры
Вывод обновленной сессии без перезагрузки страницы  
0
Заблокирован
22.08.2016, 16:13 4
Зачем столько воды писать? Мне и так все понятно. Нужно сначала устанавливать куки, а потом уже их использовать, но не наоборот. Похоже, это вы чего-то не понимаете.
0
0 / 0 / 0
Регистрация: 31.05.2014
Сообщений: 17
22.08.2016, 16:32  [ТС] 5
Так что делать-то?
0
22.08.2016, 16:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2016, 16:32
Помогаю со студенческими работами здесь

Пример простейшего калькулятора на PHP без перезагрузки страницы (чистый Ajax, без jQuery и других библиотек)
Привет. Это, в каком-то смысле, продолжение креатива...

Как обновить данные в сессии при отправке от сервера без перезагрузки страницы
Здравствуйте, подскажите пожалуйста как можно обновить данные в сессии и вывести их на странице без...

Вывод страницы с комментариями без перезагрузки
Доброго дня всем Решил написать сюда, т.к. тема похожая. Суть в следующем - есть страница с...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru