Strict Standards: Resource ID#34 used as offset, casting to integer (34) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#36 used as offset, casting to integer (36) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#37 used as offset, casting to integer (37) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Сессии
ТвойWeb » WebMaster класс » PHP/Perl » Сессии

Страниц (3): [1] 2 3 »
 

1. Bolat - 28 Декабря, 2004 - 00:51:30 - перейти к сообщению
Проклятые сессии - ниче нормально не получается! Heeelp!

CODE:

<form name="Forma" action="SomeFile.php" method="post">
<input type="submit" value="Send">
</form>


Что нужно сделать(с помощью сессий) чтобы определить сколько раз с какогото компа была нажата кнопка "Send"?

2. TvoyWeb - 28 Декабря, 2004 - 04:18:28 - перейти к сообщению
Я даже не знаю что тебе сказать.
В прошлый раз, в вопросе о сессиях, ты высказался, что знаком с работой сессий.
Но ИМХО это не совсем так.
Одними сессиями, то что ты хочешь сделать, не добиться.
Для решения такой задачи, необходимо определиться с критериями уникальности, того кто послал данную форму.

Это самое главное. Вообще нет способов на 100% идентифицирующих пользователя, кроме прямой авторизации.
1. Определения IP
2. Определение браузера
3. Определение ОС на компе, ее версии, локали.
4. Определение разрешения монитора (используя яваскрипт и передав эту инфу php скрипту)
5. Можно также определять глубину цвета монитора.
6. Определение всего что только можно на компе пользователя.
Чем больше идентификационных данных тем выше вероятность уникальности.

Предположим что решили идентифицировать юзера по первым 5 пунктам. То есть при совпадении всех этих параметров, будем считать что юзер уже кликнул по кнопке.
НО! IP можно сменить! Ок. Отбрасываем первый пукнт. И опять, НО! Например у меня пять браузеров стоят на компе. А значит я смогу безпрепятственно кликать по кнопке.
А это не удовлетворяет нашему условию "один юзер - один клик".
Вообщем это довльная сложная задача.
Пока нет такого параметра по кторому можно было бы точно определить уникальность пользователя.
Я где то читал, что были попытки идентифицировать по ID конечной машины, но там что то было довольно сложно и не нашло широкого применения.

Далее нужно определиться где хранить эту информацию. Есть много способов хранения:
1. Можно записывать данные в сессию. НО! Закрыл юзер браузер и сессия закончилась, а значит утерены все необходимые данные.
2. Можно записывать в куки. НО! Юзер может вообще не принимать куков, либо куки у него очищаются при выходе, либо он сам принудительно очистил куки.
3. Можно записывать в базу данных (без разницы в какую4 файлы или, например MySQL). Этот вариант, в смысле сохранности данных, наиболее предпочтителен. Юзер уже нее сможет повлиять на эти данные.

Итог. Нет механизма 100% идентификации. Для каждой конкретной задачи, нужно чем то поступиться.
Например для простого голосования вполне можно обойтись записью в куки и потом проверять эту запись.

А собственно тебе это для каких целей Улыбка. А то я здесь расписался....Улыбка
И что конкретно у тебя не получается с сессиями?
3. Bolat - 28 Декабря, 2004 - 04:42:56 - перейти к сообщению
Задача банальна:
Не позволить одному и тому же челу проголосовать дважды.

Цитата:
Итог. Нет механизма 100% идентификации.

Понятно. Тогда как посоветуеш оптимальнее иден-ть чела?
Как это конкретно сделать?

Цитата:
Можно записывать в куки. НО! Юзер может вообще не принимать куков, либо куки у него очищаются при выходе, либо он сам принудительно очистил куки.


Придется наверное всетаки выбрать куки. Как конкретно это сделать?


4. lunux - 28 Декабря, 2004 - 06:52:55 - перейти к сообщению
Те надо замутить базу данных проголосовавших основываясь на их IP адресе и постоянно читать базу и проверять голосовал ли чел или нет. Однако можно замутить тему и проше, на основе твоей идеи, правда не на сессиях а на cookies, т.е. данных хранящихся на стороне юзера. Однако, такой вариант имеет свои недостатки. Не все броузеры поддерживают куки, или просто их поддержка может быть отключена, а так же юзер легко может подчистить куки на своём компе следовательно легко проголосует не один раз Голливудская улыбка
5. TvoyWeb - 28 Декабря, 2004 - 08:37:30 - перейти к сообщению
Bolat пишет:
Не позволить одному и тому же челу проголосовать дважды.

Откровенно говоря, знал бы это раньше, не расписывал бы. А просто послал бы в поиск. На форуме уже есть тема об этом.
Ну раз уж написал то ладно. Вопрос такой. Ты не хочешь чтобы данный юзер вообще не голосовал больше одного раза?
Если да, то клади куку с большим временем жизни. И каждый раз проверяй ее.
На пхп это делается функцией setcookie() .
lunux

Здесь на форуме, мы рады каждому новому пользователю. Но здесь, как и на других конференциях есть свои правила. Старайся соблюдать их.
Это к тому, что ни один твой пост не был в тему. Вот и здесь ты высказал все то что я написал выше.
Я надеюсь, на то, что ты воспримешь это не как обиду, а как конструктивную критику, и на понимание.
И еще раз, добро пожаловать на форум.
P.S. Этот оффтоп не обсуждается. Есть вопросы по этому поводу? создай тему в соответсвующем разделе.

6. Bolat - 28 Февраля, 2005 - 00:47:38 - перейти к сообщению
Приветы.

Я коечто недопонял с этим несчастным идентификатором сессии.
Как его правельно использовать?

Я создал таблицу user с полями id, name, password и т.д.
Ещё создал таблицу auth с полями user_id(должно соответствовать с id в user), ses_id(сюда кидаю $session_id) и deathTime(время существования ses_id )

Кода клиент вводит имя и пароль то они проверяются в таблице user, если сходится то в таблице auth в создаётся запись с id(user_id) вошедшего пользователя и с иден-ом сессии (ses_id)

Потом кода клиент дальше ходит по страницам то всегда проверяется есть ли в таблице auth такой иден-ор сессии. Если есть, то по user_id мы идём в таблицу user и смотрим там права юзера и всё такое...

$session_id хранится у клиента в куках?

Я вообще правельно мыслю? Или есть какойто лучший способ, связанный с сессиями?
7. TvoyWeb - 28 Февраля, 2005 - 04:27:52 - перейти к сообщению
Bolat пишет:
$session_id хранится у клиента в куках?

Да.
При первом обращении к серверу, в браузер клиента в куку кладется ID сессии и открывается сессия. Вернее открывается сессия и кладется ID.
Ты мог не создавать вторую таблицу, потому как файл сессии уже есть на сервере и туда можно записывать всю служебную инфу.
Твой вариант хорош если на сервере по каким то причинам не работают сессии. Но в этом случае нужно генерировать ID сессии и класть ее в куку. Более того нужен механизм очистки отработанных сессий в базе в таблице сессиий. ИМХО проще использовать готовые сессии на сервере.
8. Bolat - 28 Февраля, 2005 - 05:23:55 - перейти к сообщению
TvoyWeb
Цитата:
Ты мог не создавать вторую таблицу, потому как файл сессии уже есть на сервере и туда можно записывать всю служебную инфу.

Поподробнее моно про этот файл? Он где хранится? Отдельно от базы?
Цитата:
ИМХО проще использовать готовые сессии на сервере.
Плиз по подробнее моно об этом тоже.
9. TvoyWeb - 28 Февраля, 2005 - 05:43:56 - перейти к сообщению
Bolat
У тебя есть локальный сервер на компе?
И потом тебе не нужно их видеть.
А подробнее не получится. Слишком много писать.
Для начала почитай http://ru.php.net/session
Что будет непонятно спрашивай.
10. Bolat - 28 Февраля, 2005 - 06:53:05 - перейти к сообщению
TvoyWeb
Цитата:
У тебя есть локальный сервер на компе?

Конечно есть.
Цитата:
А подробнее не получится. Слишком много писать.


Мне непонимается НАЗНАЧЕНИЕ идентификатора. То есть для чего он?
Чтобы не перехватили параметры ходящие по урлам?
Например если кто то перехватит этот иден-ор чо с ним моно сделать?
Цитата:
Для начала почитай http://ru.php.net/session

Читаю тоже щас ...

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0455]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33