Есть некоторые мысли, но хочу понять в правильном направлении или нет.
Допустим есть мой сайт, мне нужно постоянно определять местоположение пользователя, в первый раз пользователю появляется всплывающее окно с просьбой подтвердить населённый пункт, после чего запоминается в печеньки.
Сейчас я определяю населённый пункт пользователя сторонним сервисом, но у них есть лимиты и они в общем то могут в любой момент закрыть свой проект. И никто не отменял времени ожидания от их сервера.
Хочу хранить эти данные в своей DB, в связи с чем стоит вопрос правильного хранения [ IP - Населённый пункт ], используя MySQLi.
P.S. например разные пользователи три раза подтвердили, что IP находится в их городе, тогда делаю запись в основную таблицу. А если в основной таблице нет такого IP, то дёргаю со стороннего сервиса.
Ну и опять как хранить IP чтобы снизить нагрузку.
_____________
Принимаю заказы, писать в ЛС
killer8080
6.07.2016 - 21:57
Привязка IP к местности штука весьма условная и корректно работает далеко не всегда, об этом нужно помнить.
Цитата (Медведь @ 6.07.2016 - 18:33) |
Допустим есть мой сайт, мне нужно постоянно определять местоположение пользователя, в первый раз пользователю появляется всплывающее окно с просьбой подтвердить населённый пункт, после чего запоминается в печеньки.
|
ход мыслей правильный
Цитата (Медведь @ 6.07.2016 - 18:33) |
Сейчас я определяю населённый пункт пользователя сторонним сервисом, но у них есть лимиты и они в общем то могут в любой момент закрыть свой проект. И никто не отменял времени ожидания от их сервера. |
эту задачу можно переложить с сервера на клиент
http://dev.maxmind.com/geoip/legacy/javascript/Цитата (Медведь @ 6.07.2016 - 18:33) |
Хочу хранить эти данные в своей DB |
а вот тут следует задуматься, нужно ли хранить эту информацию на сервере? С какой целью?
Цитата (killer8080 @ 6.07.2016 - 21:57) |
Цитата (Медведь @ 6.07.2016 - 18:33) | Хочу хранить эти данные в своей DB |
а вот тут следует задуматься, нужно ли хранить эту информацию на сервере? С какой целью?
|
Если это не создаст большой нагрузки, почему бы и нет. Доверять сторонним ресурсам не стоит, да и время отдачи страницы пользователю увеличивается (пока мой сервер отправит и получит ответ, и не факт что получит, если тот сервер будет не доступен или у меня будет превышен лимит запросов)
А так создать свою базу, пользователи в основном будут одни, поэтому необходимость делать запросы к стороннему ресурсу пропадает, а надёжность увеличивается.
_____________
Принимаю заказы, писать в ЛС
ip2long();
long2ip();
. Иметь свою гео базу для своих клиентов вполне можно. Можно сделать накопительную базу, то есть сегодня она пустая, завтра добавится новый пользователь и в момент установки своего региона, пользователь выбирая этот регион, как раз и добавить свой ip в соответствии с регионом в эту базу (это можно делать без всплывающего окна, а как бы без ведома пользователя, зачем ему лишняя инфа). Ну а при появлении нового пользователя, выдавать ему до установки собственных гео данных что-то нейтральное.
Таким образом гео таблица будет наполнятся автономно.
sg.com ip2long вроде работает только с IPv4, а вообще твой вариант мне понравился. Например при регистрации подставляем предположительно населённый пункт (дёргая с стороннего сервиса), после чего записываем в временную таблицу, после определённого количества совпадений перезаписываем в основную. И для авторизированных пользователей используем данные указанные при регистрации.
_____________
Принимаю заказы, писать в ЛС
killer8080
7.07.2016 - 21:50
Цитата (sg.com @ 7.07.2016 - 20:35) |
ip2long(); long2ip(); |
MySQL для этого имеет свой функционал
Цитата (Медведь @ 7.07.2016 - 21:05) |
sg.com ip2long вроде работает только с IPv4 |
мускул начиная с версии 5.6 поддерживает IPv6
INET6_ATON для хранения используй VARBINARY(16)
Цитата (Медведь @ 7.07.2016 - 19:38) |
Если это не создаст большой нагрузки, почему бы и нет. Доверять сторонним ресурсам не стоит, |
как будто есть другой способ, ты в любом случае запрашиваешь гео айпи у "стороннего ресурса"
Цитата (Медведь @ 7.07.2016 - 19:38) |
да и время отдачи страницы пользователю увеличивается (пока мой сервер отправит и получит ответ, и не факт что получит, если тот сервер будет не доступен или у меня будет превышен лимит запросов) |
этого я и не предлагал, как раз наоборот
Цитата (killer8080 @ 6.07.2016 - 21:57) |
эту задачу можно переложить с сервера на клиент |
гео данные хранить в куках. При первом заходе выводить общую страницу, без гео зависимых данных. Пользователю предлагать самому выбрать свою местность, а для удобства предлагать вариант авто определения
Цитата (killer8080 @ 6.07.2016 - 21:57) |
http://dev.maxmind.com/geoip/legacy/javascript/ |
При этом у тебя нет никаких лимитов, геолокацию запрашивает клиент, а не сервер.
Потом если это нужно для зареганных юзеров, просто сохраняешь гео данные в их профиле и не нужно парится с geoip.
А запрашивать geoip с сервера на этапе генерации контента, идея изначально плохая.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.