Forum Webscript.Ru

Программирование => Perl => Тема начата: torres от 03 Ноября 2005, 15:56:58

Название: CGI::Session
Отправлено: torres от 03 Ноября 2005, 15:56:58
всем привет. Естя такая проблема:
устоновил модуль CGI::Session(нужно-рекомендовали) и прбовал с ним разобраться, не очень получяетсяб так как я тута чайник.
Буду ра любой посказки, заранее блогодарен.
А вот собствено и проблема:
есть страничка login.html:




Данные передаются submit.cgi, который собствено должен проверять :
my $cgi=new CGI;
my $user=$cgi->param(\'user_order\');
my $pass = $cgi->param(\'password_order\');
my $query="select user_name, password from order_form where user_name=? and password=?";
my $statement = $dbh->prepare($query);
$statement->execute($user, $pass);
if( $statement->fetchrow_array)# проверяю если они у  меня зарегистрированы
{
дальше по ходу если да должен записаться в my_session
$CGI::Session::MySQL::TABLE_NAME = \'my_sessions\';
my $s = new CGI::Session("driver:MySQL", $cgi, {Handle=>$dbh});
$s->expire(\'+10m\');
if ( $s->is_expired )
{
$s->delete();
print \'\' back to login";
exit(0);
}
if ( $s->is_empty )
{
print "Content-Type: text/html\\n\\n";
print "back to login"
exit(0);
print $s->header();
print" Mojite rabotati";
}else{
print" no such a user name";
}
что не так, буду рад помощи
Название: CGI::Session
Отправлено: commander от 03 Ноября 2005, 17:08:40
1. проверку достаточно сделать так:
SELECT 1 FROM order_form where user_name=? and password=?
но хранить в БД пароль в открытом виде лучше не стоит...

2. сессию лучше определять до того так ты начинаешь проверять логин и пассворд... а уж потом, после проверки писать туда что-либо или не писать...
 
3. сдалай лучше отдельно скрипт авторизации и скрипт входа в систему...
т.е. допустим auth.cgi:
use CGI qw(:param);
my $action = param(\'action\');
if (!$action)
{
#выводим форму ввода логина и пароля ...
}
elsif ($action eq "check")
{
#проверяем пароль и логин
if ($check) #все правильно...
  {
    print "Location: main.cgi\\n\\n";
  }
else
  {
   print "Location: auth.cgi?".time;
  }
}
  что это даст... при каждом не правильном вводе пароля будет редирект на новую страницу... (perldoc -f time)