Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.0.240] |
|
Сообщ.
#1
,
|
|
|
В общем суть проблемы такая. Сижу на провайдере и надо написать страничку, которая для каждого пользователя разная (ну допустим рассказать ему - сколько часов в инете он уже насидел). Вопрос: как на перле узнать - кто именно вызвал скрипт. REMOTE_ADDRES не катит - адресация динамическая, на авторизации - такакс висит (Linux) а тэг input на login & password ставить не хочется - все идет открытым текстом, с SSI тоже туго.
|
Сообщ.
#2
,
|
|
|
и вся таки по поводу тэга input позволю не согласится
ведь можно и не открытым текстом посылать пароль и логин. Достаточно в тэге form поставить method='post' и все переменные формы не будут светиться строке запроса и в кэше тоже. ну если уж совсем не хочется, то наверное только через кукисы use CGI qw/:standard/; use CGI::Cookie; &GetCookieInput; $CookieAbonentCod = $field{'CookieAbonentCod'}; #Если пользователь ни разу не заходил на страничку, то создаём для него уникальный 16-ти значный номер и сохраняем ему кукис на винте if($CookieAbonentCod eq "") { @TableSymbols = ('A','B','C','D','E','F','G','H','I','J','K','L','M', 'a','b','c','d','e','f','g','h','i','j','k','l','m', '0','1','2','3','4','5','6','7','8','9', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', 'n','o','p','q','r','s','t','u','v','w','x','y','z'); for($i = 0; $i < 16; $i++) { $NumberOneSymbol = int(rand(62)); $NewAbonentCod = $NewAbonentCod.$TableSymbols[$NumberOneSymbol]; } $CookieAbonentCod = $NewAbonentCod; my $setcookie = new CGI::Cookie(-name => 'CookieAbonentCod', -value => [$NewAbonentCod], -expires => '+3M'); print ("Set-Cookie: $setcookie\n"); } #Если же пользователь уже заходил на страничку, то у него уже лежит этот кукис и переменная $CookieAbonentCod будет содержать этот номерочек #А это сама функйия получения от пользователя кукиса sub GetCookieInput { (*fval) = @_ if @_ ; local ($buf); if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN,$buf,$ENV{'CONTENT_LENGTH'}); } else { $buf=$ENV{'HTTP_COOKIE'}; } if ($buf eq "") { return 0 ; } else { @fval=split(/; /,$buf); foreach $i (0 .. $#fval){ ($name,$val)=split (/=/,$fval[$i],2); $val=~tr/+/ /; $val=~ s/\%(..)/pack("c",hex($1))/ge; $name=~tr/+/ /; $name=~ s/\%(..)/pack("c",hex($1))/ge; if (!defined($field{$name})) { $field{$name}=$val; } else { $field{$name} .= ",$val"; #if you want multi-selects to goto into an array change to: #$field{$name} .= "\0$val"; } } } return 1; } Естевственно это всё на Перле |
Сообщ.
#3
,
|
|
|
тыж провайдер.
и сам через dhcp юзерам ip даеш. почему нельзя через remote_addr ? пообщайся со своими сисадминами. пусть они тебе логят текущих юзеров. про тег input. если ты пров, то как юзер вмето тебя другой роуер в инет возьмет ? никто кроме вас его проснифить не сможет. а в доке на главной странице напишите, чтоб не юзали внешнюю проксю. кто не послушал - сам виноват. |
Сообщ.
#4
,
|
|
|
дополнения.
еснсо если на компе стоит сквид (прокси), на нем можно логить трафик через хттп. или если в одном сегменте с этим клиентом есть еще некоторые клиенты. тут ессно можно весь сегмент слушать. но отмазка в этих случаях стара и проста: "выб еще на лбу айди/пасворд написали и по улице ходили." зы. будте жоще - и клиентура потянется =). |