Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 1
Регистрация: 18.09.2017
Сообщений: 153

Процесс регистрации через сессию

20.07.2018, 22:05. Показов 811. Ответов 19

Студворк — интернет-сервис помощи студентам
Делаю регистрацию (заполнение формы) через сессию.
Скрипт, который проверяет данные пользователя и пишет все в БД, генерирует Логин и пароль, который я должен показать пользователю в случае успешного завершения процесса.
PHP
1
$_SESSION['success']['log']=$login; $_SESSION['success']['id']=$id;
и делаю редирект обратно на форму ввода
PHP
1
Header ("Location: newuser_form.php");
где проверяю наличие этого массива и вывожу сообщение :
PHP
1
2
3
4
5
6
//Сообщение об успешном вводе/редактировании объявления
if (isset($_SESSION['success']) ){
    
//... здесь код для вывода инфо
$msg=.....;
}
Все бы казалось нормально, но если я в другой вкладке браузера открою эту форму (например тут-же подредактировать или еще для чего), то разумеется я вижу это-же сообщение. Если я внутри блока поставлю удаление этого элемента массива
PHP
1
2
3
4
5
6
7
//Сообщение об успешном вводе/редактировании объявления
if (isset($_SESSION['success']) ){
    
//... здесь код для вывода инфо
$msg=.....;
unset ($_SESSION['success']);
}
то соотв. такого не происходит, но при рефреше страницы, сообщение естественно тоже не выведется (что не очень хорошо для юзабилити, т.к. юзер может не случайно это сделать и не успеть записать/сохранить свои данные)
Можно конечно при редиректе ввести в URL какую-нибудь переменную и дополнительно проверять
PHP
1
Header ("Location: newuser_form.php?success=1");
и дополнительно проверять на это условие перед выводом сообщения, но не очень мне это нравиться, т.к. юзер может руками внести этот URL в другой вкладке и увидеть это сообщение опять.
Что посоветуете сделать? Как можно решить проблему? Или я в принципе неправильно делаю?
Кстати отправку формы через объект FormData не предлагайте, т.к. я и так это делаю, а вышеописанная часть через сессии и редирект у меня в ветке для браузеров, которые не поддерживат данный объект
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.07.2018, 22:05
Ответы с готовыми решениями:

Активная ссылка через сессию
Здравствуйте. Бюсь над проблемой как организовать подобную схему. Выводится из базы данных категории: ID NAME CAT 1 |...

Передача множества переменных через сессию
пусть на сайте есть 50 переменных (разного формата) которые берутся с БД при первом заходе на сайт , а дальше все переменные передаются...

Не получается удалить сессию через определенное время
Народ всем привет, подскажите почему не получается удалить сессию? В коде вроде все верно if(time() > $_SESSION+60){ ...

19
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
20.07.2018, 22:15
Цитата Сообщение от SergTN Посмотреть сообщение
Или я в принципе неправильно делаю?
Именно. Одна и та же страница в двух вкладках должна выглядить одинаково.
0
1 / 1 / 1
Регистрация: 18.09.2017
Сообщений: 153
20.07.2018, 22:40  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Именно. Одна и та же страница в двух вкладках должна выглядить одинаково.
ну совсем одинаково она не может выглядеть, там-же есть и редирект на нее с перечнем ошибок, допущенных при вводе, не только с уведомлением об успешном завершении)
Т.е Вы считаете, что надо отдельную страничку делать для данного случая (успешного завершения ). Я как-раз вот от нее хотел отказаться т.к. при ее использовании возникают вообщем-то аналогичные проблемы. Если ссылку на такую страницу открыть в отдельной вкладке, то там тоже буде выведено сообщение с логином и паролем. Теоретически, кто-то может таким образом подсмотреть пароль пользователя, если тот не разлогинется, а посторонний случайно введет ссылку на страничку завершения.
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
20.07.2018, 23:14
Ниче не понял
Или понял
Короче, в случаи удачи откройте вторую сессию а на других вкладках проверяйте ее уже
0
1 / 1 / 1
Регистрация: 18.09.2017
Сообщений: 153
20.07.2018, 23:34  [ТС]
Цитата Сообщение от andyyy Посмотреть сообщение
Короче, в случаи удачи откройте вторую сессию
что значит вторую сессию?)) Именованную что-ли?
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
21.07.2018, 08:41
If(ссесия1-удачно и не существует ссесия 2){показать, то что вы хотите показать, ссесия 2 в режим true}
0
1 / 1 / 1
Регистрация: 18.09.2017
Сообщений: 153
21.07.2018, 14:26  [ТС]
Цитата Сообщение от andyyy Посмотреть сообщение
If(ссесия1-удачно и не существует ссесия 2){показать, то что вы хотите показать, ссесия 2 в режим true}
Ааа, Вы наверное имели ввиду ввести в условие проверки еще один ключ в массив сессии, типа того:
PHP
1
2
3
4
5
6
7
8
if (isset($_SESSION['success']) ){
 if (!isset ($_SESSION['success']['add_key'])){
//... здесь код для вывода инфо
$msg=.....;
}
 
$_SESSION['success']['add_key'] = true;  
}
так?

Добавлено через 9 минут
Тогда эффект будет такой-же как если после вывода внутри блока if просто поставить unset ($_SESSION['success']); (т.е при рефреше сообщения уже не будет)
А мне бы хотелось чтобы при обновлении текущий вкладки это сообщение не пропадало. Хотя с точки зрения безопасности может так и надо)
0
87 / 48 / 24
Регистрация: 29.11.2016
Сообщений: 243
21.07.2018, 17:50
Цитата Сообщение от SergTN Посмотреть сообщение
PHP
1
2
3
4
5
//Сообщение об успешном вводе/редактировании объявления
if (isset($_SESSION['success']) ){
//... здесь код для вывода инфо
$msg=.....;
}
Смотри как можно сделать. Ты же снова возвращаешься в свою форму.
Заполни значения формы данными из сессии и удали их из сессии.
В БД они уже есть. Если случайно перезагрузка данные данные пойдут из старого запроса,
запишутся в сессию, снова запишутся в форму и удалятся из сессии, если случайно кнопка "отправить",
Данные пойдут из нашей заполненной формы. Опять в сессию и опять удалятся из неё и запишутся в форму.
Если открыть эту форму в другой вкладке. Она будет пустая.
Если не понятно могу написать кодом.
0
1 / 1 / 1
Регистрация: 18.09.2017
Сообщений: 153
21.07.2018, 20:31  [ТС]
Цитата Сообщение от Torovich Посмотреть сообщение
В БД они уже есть. Если случайно перезагрузка данные данные пойдут из старого запроса,
запишутся в сессию, снова запишутся в форму и удалятся из сессии, если случайно кнопка "отправить",
Данные пойдут из нашей заполненной формы. Опять в сессию и опять удалятся из неё и запишутся в форму.
Если открыть эту форму в другой вкладке. Она будет пустая.
Я запутался))))
Если я просто удалю внутри блока
PHP
1
 if ()  {  ....unset ($_SESSION['success']);}
то оно тоже не выведется в другой вкладке. Просто он исчезнет и пре случайной перезагрузке этой вкладки
0
87 / 48 / 24
Регистрация: 29.11.2016
Сообщений: 243
21.07.2018, 23:04
Да, при случайной перезагрузке отправятся старые данные формы.
Если отправляешь a, b, скрипт генерирует c, d, то при перезагрузке c, d, исчезнет.
(Это когда тебе браузер пишет, данные устарели, отправить заново).
В остальном все данные сохраняются. При этом в сессии они отсутствуют.
Ты мне примерно опиши, что отправляешь в форме, какие данные возвращаешь.
Напишу пример, как использовать.

Добавлено через 6 минут
Цитата Сообщение от SergTN Посмотреть сообщение
Процесс регистрации через сессию - PHP
Еще вопрос. Ты сам генерируешь логин или это привилегия пользователя.
Если пользователя, то все данные можно будет сохранить.
0
1 / 1 / 1
Регистрация: 18.09.2017
Сообщений: 153
22.07.2018, 17:11  [ТС]
Цитата Сообщение от Torovich Посмотреть сообщение
Еще вопрос. Ты сам генерируешь логин или это привилегия пользователя.
Если пользователя, то все данные можно будет сохранить.
И логин и пароль генерю сам.
Цитата Сообщение от Torovich Посмотреть сообщение
Ты мне примерно опиши, что отправляешь в форме, какие данные возвращаешь.
Напишу пример, как использовать.
Название компании, Имя, мэйл, телефоны, фото (необязателный параметер)
Возвращается при успешной записи текст типа: "Вы успешно зарегострировались. Ваш логин: "логин" , Ваш пароль: "пароль". "
Я вот подумал, а может правильно , что эти данные пропадут при перезагрузке страницы? Т.к. поведение страницы при отправке формы через FodmData и AJAX при рефреше страницы будет аналогичным- данные тоже пропадут. И с точки зрения безопасности - если кто-то по истории браузера случайно или нет кликнет это ссылку (если юзер не разлогинился) он сможет увидеть пароль юзера.
0
87 / 48 / 24
Регистрация: 29.11.2016
Сообщений: 243
22.07.2018, 17:54
Цитата Сообщение от SergTN Посмотреть сообщение
а может правильно , что эти данные пропадут при перезагрузке страницы?
Да, здесь правильно. Я тут поэксперементировал. Либо сохраняются и в открытой вкладке данные существуют, либо нет.
Нужно тогда подумать, как восстановить данные, если пользователь забыл логин или пароль.
По поводу телефонов, их может быть несколько и на кого они завязаны на физ. лицо или на компанию.
Если телефонов много следует их вынести в отдельную таблиц, как и имя компании. Чуть позже напишу структуру таблиц
и их связь.
0
1 / 1 / 1
Регистрация: 18.09.2017
Сообщений: 153
22.07.2018, 19:50  [ТС]
Цитата Сообщение от Torovich Посмотреть сообщение
Нужно тогда подумать, как восстановить данные, если пользователь забыл логин или пароль.
По поводу телефонов, их может быть несколько и на кого они завязаны на физ. лицо или на компанию.
Да это надо предусмотреть. Телефонов пока решил сделать фиксировано парочку, без уточнения на кого они, просто контактные телефоны

Добавлено через 10 минут
Цитата Сообщение от Torovich Посмотреть сообщение
Да, здесь правильно. Я тут поэксперементировал. Либо сохраняются и в открытой вкладке данные существуют, либо нет.
Я попробовал ввести дополнительную переменную в URL ввести (как я хотел в конце самого первого сообщения) и проверять на существование ее и сессии (без удаления unset ($_SESSION['success']) ). Тогда и при перезагрузке не пропадает и при открытие этой-же формы для редактирования (т.е уже без этого ключа в URL) не показывается. Но тогда, как я писал выше в истории браузера можно откопать стараницу с показанным паролем (т.к. сессия живет довольно долго без дополнительных настроек, в которых я пока не очень разбираюсь) А укорачивать ее специально на этот случай тоже не айс- юзера будет постоянно разлогинивать). И кстати даже если создавать для показа пароля отдельную страницу, то результат будет тот-же
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
22.07.2018, 21:51
Стока букв, напишите что хотите полностью

вы хотите показать $msg один раз а на другой вкладке чтобы его уже не было?

Добавлено через 4 минуты
Ааа, Вы наверное имели ввиду ввести в условие проверки еще один

Нет
0
87 / 48 / 24
Регистрация: 29.11.2016
Сообщений: 243
22.07.2018, 22:26
Вот смотри, что получилось. Там ещё работы море с проверкой базы.
Вложения
Тип файла: zip comp.zip (3.5 Кб, 2 просмотров)
0
1 / 1 / 1
Регистрация: 18.09.2017
Сообщений: 153
22.07.2018, 23:22  [ТС]
Цитата Сообщение от andyyy Посмотреть сообщение
вы хотите показать $msg один раз а на другой вкладке чтобы его уже не было?
именно так. Но при перезагрузке страницы оно не пропадала. (хотя уже не уверен, что это хорошо)

Добавлено через 1 минуту
Цитата Сообщение от Torovich Посмотреть сообщение
Вот смотри, что получилось. Там ещё работы море с проверкой базы.
Ого! Столько кода написали! Спасибо. Сейчас буду разбираться)
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
23.07.2018, 12:26
Цитата Сообщение от SergTN Посмотреть сообщение
Но при перезагрузке страницы оно не пропадала
если ссесия открыта как она может пропасть?
0
87 / 48 / 24
Регистрация: 29.11.2016
Сообщений: 243
23.07.2018, 16:46
Цитата Сообщение от andyyy Посмотреть сообщение
если ссесия открыта как она может пропасть?
Здесь нам сессия нужна для разовой передачи логина и пароля. Если их не удалить,
получим брешь в безопасности.
Мы создаём логин и пароль записываем в сессию, переходим обратно на страницу
откуда отправляли запрос. Считываем данные из сесии и удаляем их из сессии. Если
не удалить, то при открытии другой вкладки на этом компьютере эти данные выведутся.
А так время их существования несколько милисекунд. Только для передачи с сервера клиенту.
0
1 / 1 / 1
Регистрация: 18.09.2017
Сообщений: 153
23.07.2018, 20:31  [ТС]
Цитата Сообщение от Torovich Посмотреть сообщение
Здесь нам сессия нужна для разовой передачи логина и пароля. Если их не удалить,
получим брешь в безопасности.
Мы создаём логин и пароль записываем в сессию, переходим обратно на страницу
откуда отправляли запрос. Считываем данные из сесии и удаляем их из сессии. Если
не удалить, то при открытии другой вкладки на этом компьютере эти данные выведутся.
А так время их существования несколько милисекунд. Только для передачи с сервера клиенту.
Именно!


Цитата Сообщение от Torovich Посмотреть сообщение
Вот смотри, что получилось. Там ещё работы море с проверкой базы.
А смысл в повторной передачи через скрытые поля Логина и Пароля - в том, чтобы при повторном нажатии Отправить, вернулся этот-же пароль и логин?
0
87 / 48 / 24
Регистрация: 29.11.2016
Сообщений: 243
23.07.2018, 20:40
Цитата Сообщение от SergTN Посмотреть сообщение
чтобы при повторном нажатии Отправить, вернулся этот-же пароль и логин
Пока регистрация полностью не закончена, если эти данные не отправить, сгенерируются новые логин с паролем.
И произойдет запись новых данных в базу с одинаковыми данными (компания, имя, телефон...) но уже с новым
логином и паролем. Сейчас это все равно происходит. Я там место закоментировал для проверки, которую нужно
сделать до записи в базу. Если проверка не пройдет, запись не производить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.07.2018, 20:40
Помогаю со студенческими работами здесь

Как передать через сессию все данные?
Как предать все данные через $_SESSION на другую страницу, так чтобы передавалось не поселение число а все. Если я вывожу $_SESSION, то...

Как сделать авторизацию через сессию?
Помогите вот нашел в интернете исходники все работает как нужно не много подкорректировал,но вот в чем дело там надо вводить логин при...

ID клиента и его вывод через сессию
Такое дело! Есть код: session_start(); if (isset($_SESSION) == '' ){ $conn = mysql_connect("localhost", "xxx",...

Как запомнить пользователя через сессию?
На сайте реализована авторитизация через сессию, разумеется после закрытия браузера юзер разлогинивается... как можно сделать это типичное...

Процесс авторизации/регистрации
Как реализовать всплывающее окно авторизации/регистрации при старте программы? Есть определенная программа. Нужно ее связать с формой (...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru