Jump to content
  • 0

Каждому гостю id


web-mindfreak
 Share

Question

25 answers to this question

Recommended Posts

  • 0

самый оптимальный вариант это воспользоваться парой IP+Браузер и всё это перевернуть в MD5.

Шансов что попадутся одинаковые пользователи с одинаковыми IP и версией браузера очень и очень маленький..

вот как определить IP более полно

function getIp() {
$serverVars = array("HTTP_X_FORWARDED_FOR", "HTTP_X_FORWARDED", "HTTP_FORWARDED_FOR", "HTTP_FORWARDED", "HTTP_VIA", "HTTP_X_COMING_FROM", "HTTP_COMING_FROM", "HTTP_CLIENT_IP", "HTTP_XROXY_CONNECTION", "HTTP_PROXY_CONNECTION", "HTTP_USERAGENT_VIA");
foreach ($serverVars as $serverVar) {
if (!empty($_SERVER) && !empty($_SERVER[$serverVar])) {
$proxyIP = $_SERVER[$serverVar];
} elseif (!empty($_ENV) && isset($_ENV[$serverVar])) {
$proxyIP = $_ENV[$serverVar];
} elseif (@getenv($serverVar)) {
$proxyIP = getenv($serverVar);
}
}
if (!empty($proxyIP)) {
$isIP = preg_match('|^([0-9]{1,3}\.){3,3}[0-9]{1,3}|', $proxyIP, $regs);
$long = ip2long($regs[0]);
if ($isIP && (sizeof($regs) > 0) && $long != -1 && $long !== false) return $regs[0];
}
return $_SERVER['REMOTE_ADDR'];
}

вот как определить Браузер более полно

	function gerUserBrowser($param = 'both', $separator = ' ') {
$agent = $_SERVER['HTTP_USER_AGENT'];
preg_match("/(MSIE|Opera|Firefox|Chrome|Version|Opera Mini|Netscape|Konqueror|SeaMonkey|Camino|Minefield|Iceweasel|K-Meleon|Maxthon)(?:\/| )([0-9.]+)/", $agent, $browser_info);
list(, $browser, $version) = $browser_info;
if (preg_match("/Opera ([0-9.]+)/i", $agent, $opera)) return 'Opera ' . $opera[1];
if ($browser == 'MSIE') {
preg_match("/(Maxthon|Avant Browser|MyIE2)/i", $agent, $ie);
if ($ie) return $ie[1] . ' based on IE ' . $version;
return 'IE ' . $version;
}
if ($browser == 'Firefox') {
preg_match("/(Flock|Navigator|Epiphany)\/([0-9.]+)/", $agent, $ff);
if ($ff) return $ff[1] . ' ' . $ff[2];
}
if ($browser == 'Opera' && $version == '9.80') return 'Opera ' . substr($agent, -5);
if ($browser == 'Version') return 'Safari ' . $version;
if (!$browser && strpos($agent, 'Gecko')) return 'Browser based on Gecko';
switch ($param) {
case "browser":
$result = $browser;
break;
case "version":
$result = $version;
break;
default:
$result = $browser . strip_tags($separator) . $version;
}
return $result;
}

Остаётся только получить данные, сложит и преобразовать в MD5, например так

$id_user = md5(getIp() . gerUserBrowser());

Но если и этого мало, то добавь к примеру расширение монитора

Edited by Gold Dragon
Link to comment
Share on other sites

  • 0

Всем спасибо!

А вот еще такой вопрос ,не по этой теме.

Скрипт отправки сообщения.

При отправление скрипт проверяет есть ли в БД пользователь

Как это сделать,а то что-то не получается.(

Файл:message.php

<?
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Сообщения</title>
</head>

<body>
<?php
require_once('bd.php');
mysql_select_db('My');
$q = mysql_query("SELECT * FROM `users`");
$myrow = mysql_fetch_array($q);
while (mysql_fetch_array($q))
{
echo $myrow[login];
/*if ($res == $res['name'])
{
$send = 1;
}
else
{
$send = 0;
}*/
}
if ($send == 1)
{
$query = mysql_query("INSERT INTO `My`.`message` (
`id_user1` ,
`id_user2` ,
`text` ,
`status`
)
VALUES (
'$_SESSION[username]', '$_POST[to_user]', '$_POST[message]', '0'
)");
}
else
{
echo 'Пользователя не существует!';
}
?>
</body>
</html>

Файл:mess.php

<?
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Сообщения</title>
</head>

<body>

<?php
require_once('bd.php');
echo <<<HERE
<b>Написать сообщение:</b>
<form action="message.php" method="post">
<b>Кому:</b><input type="text" name="to_user"><br>
<b>Сообщение:</b><br>
<textarea name="message" style="width:16%;margin-left:0px" rows="10" ></textarea><br>
<input type="submit">
</form>
HERE;
?>

</body>
</html>

Edited by web-mindfreak
Link to comment
Share on other sites

  • 0
можно заводить каждому юзеру свою сессию, сохранять в куках и записывать в бд, а потом уже работать уже с нею..., наверное как-то так.
Сессия это временное решение пока работает браузер и при следующем заходе сессия будет другая. Если использовать сессию как идентификатор, то тоже не совсем правильно получится, куки очищаются. Хотя автор не совсем чётко пояснил как долго нужно учитывать Гостя :) Если только для "Кто в online" то сессия самый идеальный вариант, для всего остального недостаточно..

Идентификатор должен быть более-менее постоянный. Конечно самый идеальный вариант привязаться к "железу", например макадрес сетевой карты :0 но это не реально.. Самый оптимальный вариант - это IP, но тоже не вариант так как есть и динамические, есть и общий на организацию и т.п. Самое постоянное это расширение экрана + версия браузер. Хотя браузеры часто начали обновляться в последнее время.

Наверное правильное решение всё это комбинировать. Например, учитывать IP+браузер и оставлять отметки в куках, но не идентификатор сессии, а что-то такое что можно ещё не только проверить на существование, но и сравнить с чем-то. Тем самым мы можем увеличить количество проверок.

PS

я так понял, если предложить вариант решения и приложить подробный код, то сразу получаешь -1? :rofl: Просто интересно за что?

Link to comment
Share on other sites

  • 0

Нуу как бы чтобы у каждого пользователя был личный ключ!

А потом пользоватся этим ключом для активации чего либо

Примерно как-то так:

$key = 'webkey';

$_SESSION['user_key'] = $user_key = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].$key);

Link to comment
Share on other sites

  • 0

Всё равно не понятно для активации чего :) Активация активации рознь... Можно к примеру просто обойтись проверкой что перед тобой человек, а не бот и попросить пройти простое подтверждение через картинку-код. А в других случаях гостям вообще нечего делать, пусть полноценно проходят регистрацию..

Кстати, советую использовать мои функции для получения IP и версии браузера, они более корректно это определят, иначе погрешность ещё более возрастёт. Я не ради рекламы ;) просто постоянно этим пользуюсь и на сегодня я считаю это самый совершенный код... ошибок минимум

Edited by Gold Dragon
Link to comment
Share on other sites

  • 0

PS

я так понял, если предложить вариант решения и приложить подробный код, то сразу получаешь -1? :rofl: Просто интересно за что?

со всем вышесказанным согласен и для временного юзера нет абсолютно нормального рабочего кода для его идентификации.

З.Ы. я тоже не минусовал репу.

Link to comment
Share on other sites

  • 0

первая функция по возможности максивально пытается найти IP адрес из разных переменных $_SERVER и приводит (проверяет) на соответствие стандарту

Вторая функция определяет агента и приводит его в правильный вид (некоторые браузеры вносят путаницу в отображение версий). Просто нет чёткого формата как и что отображать, а производители не особо этим озабочены.. А вообще у функции есть два дополнительных параметра

gerUserBrowser($param1, $param2)

$param1

- "browser" - получить только название

- "version" - получить только версию

- "both" (или всё что угодно) - получить название и версию браузера (по умолчанию)

$param2 - разделитель, через который будет название будет отделено от версии (по умолчанию пробел)

Edited by Gold Dragon
Link to comment
Share on other sites

  • 0
со всем вышесказанным согласен и для временного юзера нет абсолютно нормального рабочего кода для его идентификации.
Я как-то в одном проекте заказчику понадобилось устроить голосование, но максимально исключить накрутки и я использовал следующее

- учёт IP

- учёт названия браузера

- учёт версии браузера

- учёт расширения экрана

- уникальное число (md5(time))

всё это учитывал отдельно в базе данных и также в куках. При этом заносилась и дата-время голосования

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

1 - совпадение IP с данными из базы

2 - совпадение IP с данными из базы + существует кук с такими же данными

3 - ip + название браузера

4 - ip + название браузера + такие же данные в существующем куке

... и так далее

10 - полное совпадение всех данных как в таблице так и куках

Плюс ко всему дата-время играло тоже роль контроля, можно было устанавливать ограничение по времени голосования. Так что хоть чуть-чуть но можно было отслеживать и регулировать Гостей

Но всё это больше похоже на "большое извращение" :rolleyes: Но желание заказчика - закон.. У себя я Гостям даю очень мало прав и считаю для идентификации достаточно IP+browser

Link to comment
Share on other sites

  • 0
со всем вышесказанным согласен и для временного юзера нет абсолютно нормального рабочего кода для его идентификации.
Я как-то в одном проекте заказчику понадобилось устроить голосование, но максимально исключить накрутки и я использовал следующее

- учёт IP

- учёт названия браузера

- учёт версии браузера

- учёт расширения экрана

- уникальное число (md5(time))

всё это учитывал отдельно в базе данных и также в куках. При этом заносилась и дата-время голосования

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

1 - совпадение IP с данными из базы

2 - совпадение IP с данными из базы + существует кук с такими же данными

3 - ip + название браузера

4 - ip + название браузера + такие же данные в существующем куке

... и так далее

10 - полное совпадение всех данных как в таблице так и куках

Плюс ко всему дата-время играло тоже роль контроля, можно было устанавливать ограничение по времени голосования. Так что хоть чуть-чуть но можно было отслеживать и регулировать Гостей

Но всё это больше похоже на "большое извращение" :rolleyes: Но желание заказчика - закон.. У себя я Гостям даю очень мало прав и считаю для идентификации достаточно IP+browser

не думаю что основной упор для идентификации следует делать на браузер+разрешение экрана+ip, так как ты сам чуть выше сказал что:

1) ip может быть динамическим (что чаще всего и бывает).

2) браузер - тоже спорный момент, ибо есть популярные браузеры (что можно проверить в статистике), то есть факт совпадения может быть.

3) версия браузера - обновление приходит мессагом и юзер как правило обновляет, так как желание иметь у себя обновленный девайс превышает страх перед глюками и тому подобными недостатками обновлений, он просто об этом не задумывается.

4) сессия - ну тут есть стандартные значения, такие например как время ее жизни и место хранения, но ведь ты разработчик и тебе по плечу изменить эти два параметра? ;)

5) кука - этот параметр конечно нам не особо доступен, так как хранится у юзера, но для временного вполне себе подойдет, так как по умолчанию он уничтожается (если не указано expire - время "жизни") при обрыве (завершении) сессии.

для ВРЕМЕННЫХ последние два пункта и больше ничего не нужно!

Если же для постоянных, то эти заморочки сразу отпадут, так как в силу вступят логин+пароль в salt+md5 :)

Link to comment
Share on other sites

  • 0

rus, конечно ты на 99,9% прав ;) Я и говорю что большое извращение пытаться идентифицировать Гостя.. Но с другой стороны, кроме опыта в программировании можно немного помогает в философии да и вообще, в изобретении велосипеда, что в с вою очередь не даёт "мозгам закостенеть" :)

кстати, соль+MD5 в большинстве случаев я считаю тоже лишним

Link to comment
Share on other sites

  • 0

rus, конечно ты на 99,9% прав ;) Я и говорю что большое извращение пытаться идентифицировать Гостя.. Но с другой стороны, кроме опыта в программировании можно немного помогает в философии да и вообще, в изобретении велосипеда, что в с вою очередь не даёт "мозгам закостенеть" :)

кстати, соль+MD5 в большинстве случаев я считаю тоже лишним

да, согласен во всем.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy