Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 20.01.2019
Сообщений: 29

Проблема с $_COOKIE и сессиями

21.01.2019, 17:52. Показов 1399. Ответов 7

Студворк — интернет-сервис помощи студентам
Суть в том что во время авторизации пользователя, при условии что логин = логин в базе, а пароль = пароль в базе, запускается сессия $_SESSION['logged_user']:


PHP
1
2
3
4
if (password_verify($data['password'], $user->password)) {
            $_SESSION['logged_user'] = $user;
            header("Location: /");
        }

Далее код, если обнаружена эта сессия, создавать куки логина и пароля. Значение кука с логином = логин авторизованного пользователя, пароль, соответственно = пароль авторизованного пользователя.

PHP
1
2
3
4
    if( isset($_SESSION['logged_user'])) {
        setcookie('login', $_SESSION['logged_user']->login, time()+60*60*24*30);
        setcookie('password', $_SESSION['logged_user']->password, time()+60*60*24*30);
    }
Далее на главной странице сайта должно выводиться имя авторизованного пользователя.

PHP
1
2
3
4
if(isset($_SESSION['logged_user'])) {
    echo  '$_SESSION['logged_user']->login';
}
?>
До того как начал использовать куки всё работало прекрасно. Единственное что мне не понравилось это то что при закрытии и последующем использовании браузера, пользователя выкидывает и сессия прекращается. Пытался прикрутить куки, что сделал не так, помогите пожалуйста
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.01.2019, 17:52
Ответы с готовыми решениями:

Проблема с $_COOKIE
Проблема такова. в масиве $COOKIE по идее должны быть 3 переменных... lang, id_user и id_sess.. Опера сама показывает что куки есть, а...

Проблема с сессиями
Здравствуйте. Хочу чтобы при добавлении материала в базу данных так же записывался ид пользователя, который авторизован в данный момент. То...

Проблема при работе с сессиями
Помогите пожалуйста советом. Проблема следующая. Создаю сессию и сохраняю в ней переменные. Скрипты находятся на сервере. И вот через...

7
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
21.01.2019, 18:05
Цитата Сообщение от newArray Посмотреть сообщение
создавать куки логина и пароля
Не надо так делать. Не сохраняйте логины-пароли в куки.
0
0 / 0 / 0
Регистрация: 20.01.2019
Сообщений: 29
21.01.2019, 18:10  [ТС]
А как тогда сделать? Тематика сайта не предполагает вообще такой ситуации, что выкидывает из личного кабинета после каждого закрытия браузера. Сайт почти полностью на нём построен)

Добавлено через 3 минуты
Хотел процитировать ваше сообщение, не получилось) текст моего вопроса выше
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
21.01.2019, 18:10
Цитата Сообщение от newArray Посмотреть сообщение
А как тогда сделать?
Генерируете длинную рандомную строку (токен), которую сохраняете юзеру в куку и в базу. И по ней происходит авторизация.

Цитата Сообщение от newArray Посмотреть сообщение
не предполагает вообще такой ситуации, что выкидывает из личного кабинета после каждого закрытия браузера
Тогда сессии можно убирать, они здесь не нужны.
0
0 / 0 / 0
Регистрация: 20.01.2019
Сообщений: 29
21.01.2019, 18:36  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Не надо так делать. Не сохраняйте логины-пароли в куки.
Ладно. Я попробую сделать генератор, но у меня вопрос не в этом. Мне типа при совпадении введенного логина и пароля с данными в бд создавать куку с хешем?

Добавлено через 20 минут
Все, я сделал

PHP
1
2
3
4
5
6
$token = (string) preg_replace('/(0)\.(\d+) (\d+)/', '$3$1$2', microtime());
    $l = strlen($token);
    $c = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    for($i = 0; $i < $l; $i++){
        $token = substr_replace($token, $c[rand(0, 51)], rand(0, $l+$i), 0);
    }
Код формирует токен и заносит в базу, все работает.
Как мне теперь вкрутить это в авторизацию?

Добавлено через 3 минуты
Спасибо за помощь, я сделал)

PHP
1
2
3
4
5
6
if (password_verify($data['password'], $user->password)) {
            setcookie('cookie', $user->cookie);
            if( $_COOKIE['cookie'] == $user->cookie) {
                header("Location: /");
            }
        }
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
21.01.2019, 19:45
Лучший ответ Сообщение было отмечено newArray как решение

Решение

Цитата Сообщение от newArray Посмотреть сообщение
Код формирует токен
Для этого есть более подходящие функции:
http://php.net/manual/ru/function.random-bytes.php
http://php.net/manual/ru/funct... -bytes.php

Цитата Сообщение от newArray Посмотреть сообщение
if( $_COOKIE['cookie'] == $user->cookie) {
setcookie только отправляет куку браузеру, но не изменяет массив $_COOKIE. Он изменится только при следующем запросе.
1
0 / 0 / 0
Регистрация: 20.01.2019
Сообщений: 29
21.01.2019, 19:48  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Для этого есть более подходящие функции:
http://php.net/manual/ru/function.random-bytes.php
http://php.net/manual/ru/funct... -bytes.php


setcookie только отправляет куку браузеру, но не изменяет массив $_COOKIE. Он изменится только при следующем запросе.
Отметил как ответ. У меня уже новая проблема, не удаляется кука :с
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
21.01.2019, 19:51
Цитата Сообщение от newArray Посмотреть сообщение
не удаляется кука
http://php.net/manual/ru/function.setcookie.php
пример 2
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.01.2019, 19:51
Помогаю со студенческими работами здесь

Проблема c сессиями, как идентифицировать посетителя?
Краткая предыстория: Понадобилось мне сделать статистику посещений сайта. Все сделал, все работает. В начале каждого скрипта...

_COOKIE
if ($_REQUEST) {setcookie('user', $_POST, strtotime('+30 days'), '/'); echo $_COOKIE; die(); } подскажите почему не записывает в...

Массив $_COOKIE
Использую куки для авторизации все отрабатывает массив $_COOKIE содержит верные данные. Структура сайта такая localhost//index.php ...

$_COOKIE['name', '/local/']
Есть дириктория www/local/php.php, и www/script/php.php. cookie записывается в local: setcookie('name', $cook, time() '/local/') ...

$_COOKIE и безопасность
При регистрации нового пользователя или при входе на сайт уже существующего я записываю ему в куку его id из БД, чтобы он свободно ходил по...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru