За последние 24 часа нас посетили 70198 программистов и 5646 роботов. Сейчас ищут 1493 программиста ...

Выборка данных

Тема в разделе "PHP для новичков", создана пользователем Неугомонный, 7 сен 2023.

  1. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Я всё пытаюсь да пытаюсь что-то изобрести в свободное время))
    Задумка такова , если кукесы пустые происходит инициализация сессии, в куки рандомная строка в базу хэш строки,
    Ок , ладно ,знаний мне хватило на эти хакиииирьские манипуляции )) c md5 можно поймать колизию , сделал поле primary key. Что теперь делать ? Если id сессии выступает в виде хэша md5, взять в цикл генерировать до тех пор пока не найдется свободный.
    PHP:
    1. $session_id = session_create_id();
    2. $hahs = hash('md5', $session_id);
    Возникает вопрос теперь, как получить из базы данных этот хэш если он же и есть id,
    Код (Text):
    1. select id from sessions where id = $hash
    , ок какя-то дичь а не запрос ,походил подумал типа
    Код (Text):
    1.  select `id` from sessions
    выбрал все сесии потом поместил их массив
    PHP:
    1. $s = mysqli_fetch_assoc(mysqli_query($mysqli, "select `id` from `".PREFIX."_sessions`"));
    Помечтаем не много, вдруг у меня миллион сессии или 20 миллионов, это все 20 миллионов ждать , тоже какая-то дичь . Но пока 4 бота и я 1 :p
    Как это всё оптимизировать, чтобы можно было сравнивать или есть такой хэш (он же id) тогда выполнять мне мои задумки дальше генерация перегенерации , сравнивать или совпали не совпали с текущей и т.д и т.п , памагите навести порядок ))
     
    #1 Неугомонный, 7 сен 2023
    Последнее редактирование: 7 сен 2023
  2. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
  3. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Это не то , мне нужно сообразить поиск по таблице адекватный с моими воображаемыеми 20 миллионами, потому что я передаю не уникальное значение и primary key зря вставил чувствую:D
     
    #3 Неугомонный, 7 сен 2023
    Последнее редактирование: 7 сен 2023
  4. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    Перестал бы уже велосипед изобретать...
     
  5. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Я думал об этом уже типа взять готовую cms ,но на ошибках учатся а не на готовом по этому вопрос стоит как и стоял

    И вдруг у меня 20 миллионов этих id :oops:
    PHP:
    1. $hash = md5($session_id); // выступает в качестве id записи в бд
    2.  
    3. $s = mysqli_fetch_assoc(mysqli_query($mysqli, "select `session_id` as `id` from sessions"));
    4. if($hash != $s['id'])
    5.     // тру код :)
    Это уже 2-3 месяца прошло, я начал хоть понимать что-то, 3 месяца назад ещё веселей было ))) когда я писал select count(*) в num_rows и на конце limit 1 этот форум этих моментов не застал :D
    Типа
    PHP:
    1. if(mysqli_num_rows(mysqli_query($mysqli , "select count(*) from users where email = '{$email}' LIMIT 1" )) > 0)
     
    #5 Неугомонный, 7 сен 2023
    Последнее редактирование: 7 сен 2023
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Я тЕ уже писал в др. теме, что это хрень, и писал, как надо делать. Но ты походу проигнорил. По крайней мере я отклика не получил.
     
  7. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Ещё раз пожалуйста, я мог где-то на другом форуме зависнуть и забить
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Ну найди свою недавнюю тему, где примерно про то же самое спрашивал.

    И нафига вообще session_id самому в БД сохранять? Сессии пыха или в файлах хранятся, или ты в конфиге пыха нужное хранилище прописываешь. А поднятая тема актуальна, когда сессии пыха НЕ используются ;)
     
  9. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Для того чтобы когда ты вошёл на сайт ты гость или Вася был в одной сессии , аунтефикацию прошел опередило как пользователя к сессии в бд добавилась id пользователя вышел с аккаунта колоночка в null превратилась, у каждого свои идею, как правильно нету ))
    Или я тебе в кукесы влеплю 1 и в базу 1 ?))
    А вот это $_SESSION вообще не знаю зачем нужно, прочитал что живут до закрытия браузера , на этом и закончил изучение $_SESSION
     
    #9 Неугомонный, 7 сен 2023
    Последнее редактирование: 7 сен 2023
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Разным «гостям» одна общая сессия? :D Вообще не создавай гостям сессии, т.е.стартуй сессию по условию. Или используй для гостей «анонимные» сессии, т.е. разные, причем создавать такие сессии лучше не по GET'у, т.е. тоже не сразу создавай, а когда они какую-то кнопку тыкнут.

    А понятно... :) Доку пыха не осилил. В $_SESSION хранятся данные сессии, загруженные в память. Причем когда ты меняешь эти данные (часто говорят «меняешь сессионные переменные», т.е. элементы этого superglobal-массива), то пых обычно автоматом выписывает обновленные данные в сессионное хранилище. Немного похоже на AR :D
     
    #10 miketomlin, 7 сен 2023
    Последнее редактирование: 7 сен 2023
  11. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Ты Вася заходишь ты на сайт чекнул или у тебя куки пустые создал тебе сессию, если не пустые нужно чекать что у тебя в кукесах , так вот чтобы до этого момента дойти я пытаюсь расхлебать вот это потому что записей может быть 20кк но на само деле не будет но всё же )))
    PHP:
    1. $s = mysqli_fetch_assoc(mysqli_query($mysqli, "select `session_id` as `id` from sessions"));
    2. if($hash != $s['id'])
    Ничего не вижу в этом плохого единственное что будет весить база много но это решаемо по дате последнего посещения

    Я говорил мне всё равно как работает $_SESSION , он дохнет после закрытия, значит не интересует даже что он может хранить, это популярно во время аунтефикаци для галочки запомнить или нет, да 15 лет я не разу ее пустую так и не оставлял по своему опыту удобно когда запомнил кука в браузер ушла а не долбить каждый раз логин и пароль, решил что мусор не нужный
     
    #11 Неугомонный, 7 сен 2023
    Последнее редактирование: 7 сен 2023
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Не, тогда ты просто стартуешь сессию и «чекаешь» ее содержимое, например:
    PHP:
    1. if (isset($_SESSION['id'])) {
    2.   // сессия была создана ранее
    3. } else {
    4.   // сессия была создана только что
    5. }
    В сессионной переменной id ($_SESSION['id']) достаточно просто id юзера хранить.
     
  13. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Объясни мне , зачем мне этот мусор? Каждый раз после закрытия долбить логин и пароль в систему? +100к безопасности типа)))
    У меня пароль от гугл аккаунта на старом телефоне в виде скриена был проблема в том что я вошёл на этом телефоне ещё до того как разбил там экран ну вот 2 года хожу не зная своего пароля , номер привязан к докам а акк к номеру вот яу безопасности надо поменять пароль а мне по фигу там 20+ символов, номер же привязан как всё слетит тогда поменяю ну и телефон как доверенно устройство выступает , не скоро слетит)) а теперь представим была бы эта хрень на сессиях я бы не пользоаался бы даже Гуглом, я туда не собираюсь долбить пароль даже которого я не знаю ))
     
  14. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Не понял.
    --- Добавлено ---
    Можно использовать разные сессии для одного юзера. Если реально хочешь разделять сессию между девайсами юзера, тогда правда попробуй без сессий пыха обойтись. Как быстро искать/менять такие записи в БД, писал в др. теме.
     
  15. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Ну вот напиши себе аунтефикацию на этом массиве и поймёшь
     
  16. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Я не конченый дебил, чтобы такие массивы создавать ;)
    --- Добавлено ---
    См. приписку к пред. посту. Успехов.
     
  17. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Из Гугла
    В широком смысле слова — это все запросы, сделанные пользователем в конкретный период времени. В узком смысле «сессия» в веб-аналитике — это серия запросов или переходов с согласованной потребностью пользователя. В Google Аналитике используется понятие «веб-сеанс».

    Так от в моем представлении может сессия длится 365 дней и после закрытия браузера
    --- Добавлено ---
    Себе не хочет а другим советует , вот как раз ты и такой , сам себя так назвал переписка это подтверждает:) рассказывает учит как правильно а сам же и не хочет на этом правильно писать себе
     
  18. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Будешь борзеть, нах пошлю. Где я тебе советовал создавать стопудовый массив? Ты сам эту хрень придумал.

    Если потянуло поумничать, лучше разберись в элементарных вещах сам. А коли решил отнимать чужое время, относись с уважением и пытайся вникнуть в то, что тебе пишут. Успехов.
     
  19. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Я придумал сессию которую я увидел клю в куки хэш ключа в бд , Хэш выступает в качестве идентификатора записи, учитывая что у меня опыта мало я задал вопрос как можно решить кукок кода если 20 миллионов записей, не помещать их в массив и по ему искать же , может ещё как-то, ты не понял что происходит начала рассказывать как правильно , ну вот как правильно я считаю я уже придумал, осталось до ума довести , что и пытаюсь
    Нету как правильно главное чтобы логика была 9×5+5 или 10×5 желательно 10×5 так же проще но мы получаем один и тот же результат в обеих случаях, ну вот я выбрал путь 7×6+8
     
  20. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Реально не можешь мой пост в др. своей теме найти? :)

    В токене, который передается на клиент/приходит от клиента, объединяй id и ключ. Это объединение можешь дополнительно и на сервере хранить в отдельном поле, но обычно пакуют/распаковывают «на лету», а в отдельных полях хранят части.
    --- Добавлено ---
    Если хочешь разделять сессию между девайсами юзера, то ключ в БД нужно в открытом виде хранить, т.к. тебе понадобится его «распространять» на девайсы юзера.
     
  21. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Нету токена есть сеанс , забудь о токене это совсем другое , токен я свяжу с user_id во время входа после того как ввёл имя пользователя и парольа не изобретать свой велик , а так я решил что-то другое вот моя марка велика ))

    Ты вошёл первый раз на сайт у тебя нету не id ничего , есть только bin2hex(random_bytes(16)) в кукесах и хэш этой строки в бд , этим ты и завязал сеанс своего клиента с сервером и вот ты 30 миллионный какой-то пользователь теперь пришёл момент идентифицировать твой сеанс что ты это ты а не новый гость или чёрт который долбит куки пихает что попало туда, и тут я начал как может ещё можно оптимизировать мой код а не перебирать все 30кк в массиве , не факт что он и переберет , прелоадер грузится тебя ищет ну договатенько будет мне кажется даже с индексами))
     
    #21 Неугомонный, 7 сен 2023
    Последнее редактирование: 7 сен 2023
  22. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Я выше написал, что здесь проще без сессий пыха обойтись.

    Не надо смешивать все в одну кучу. Анонимные юзеры не могут несколько своих девайсов объединить одной сессией. А вот id-шники у анонимных пользователей вполне могут быть, почему нет?

    В общем ладно. Будут конкретные вопросы, спрашивайте.
    --- Добавлено ---
    P.S. И, как уже писал, не пытайтесь анонимных сразу авторизовывать. Пускай тыкнут на какуй-нить кнопку сначала.
     
  23. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Конченый дебил всё таки , процетировал тебя:rolleyes: пусть будет у меня бан создам новый акк , но я тебе объяснил уже как мог , на мобильном зелёном форуме вап мастеров тебе место там таких хватает кентуриков твоих , наверное знаешь этот форум, где за чирик порешают )))
     
  24. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Да кому ты нужен, чтобы модеры на тебя время тратили. Это только я могу по доброте душевной. Но всему есть предел :) Успехов.
     
  25. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Напиши мне о чём я тебе говорил пару часов и ты поймёшь что мы о разных вещах говорим , ты заучил как тебе сказали надо а я делаю как я хочу , нету как нада вот так правильно есть лучше вот так но можете и так ))
    --- Добавлено ---
    За то что пытаешься помочь спасибо. Хочешь кидай в ЛС телегу объясню как должно всю работать полностью в моем велосипеде, вроде знаний хватает это всё написать но всегда слушаю мнение других часто попадают люди которые показывают как лучше сделать моё правильно)))
     
    #25 Неугомонный, 7 сен 2023
    Последнее редактирование: 7 сен 2023