|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : PROext 2:5020/400 25 May 2001 11:33:08 To : All Subject : Re: проверка для формы -------------------------------------------------------------------------------- Anton Kudris A. <Anton.Kudris.A.@p17.f21.n5057.z2.fidonet.org> пишет в сообщении:990699313@p17.f21.n5057.z2.fidonet.ftn... > Hi, All. > > Тут как то писали, что один из вариантов проверки того, с моей ли формы мне > приходят данные - это приписывать к форме некий случайный номер и хранить его у > себя в базе данных. А потом проверять, когда от формы получены параметры искать > этот номер у себя в базе данных. > Я написал две функции, одна просто возвращает случайное число (чтобы потом > приписать его к форме), а вторая получает это число и смотрит, есть ли в базе > такое и не слишком ли оно устарело (критерий старости - один час). > В общем помогите это всё оптимизировать немного. И ещё вопрос: что я делаю > не так, почему не удаляется из файла запись во второй функции? > > sub get_number > # отдаёт случайное число. И записывает его вместе с временем в файл. > { > my $random= substr(md5_hex(int(rand 55)),0,5); #я решил, что мне хватит и 5цифр > my $hour = (localtime(time))[2]; А если я вызвал эту ф-цию в 14:59:48, а отправил форму в 15:00:02 ? Hужно заносить не только часы, но и минуты... А лучше - все значение time(), а потом проверять это значение с новым минус - 60*60 > my $string=join('' , $random, ' ', $hour,); my $string = "$random $hour"; [sckip] > sub check_number > { > my($num)=@_; #это номер, который потом ищется в базе данных my $num = $_[0]; > my $hour = (localtime(time))[2]; Hасчет веремени - см. выше... > open (ACC, "access.dat") || die "can't open access.dat"; > while (<ACC>) > { > chomp; > my ($s_num,$s_time)=split(/\s+/, $_); > $mass{$s_num}=$s_time; > } > close ACC; > > if (exists $mass{$num}) > { > if ($mass{$num}!=$hour) { return "0"; } > else { > delete $mass{$num}; > open (ACC, "access.dat") || die "can't open access.dat"; > my $arr; > foreach my $k (keys %mass) { $arr=join('', $k, ' ', $mass{$k}, "\n"); } А где запись в файл? > close ACC; > return "1"; > } > > } > } -- - --- Best regards, InSAn http://www.proext.com - PROext: Портал программиста --- ifmail v.2.15dev5 * Origin: MTU-Intel ISP (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/9104651ddf25.html, оценка из 5, голосов 10
|