Forum Webscript.Ru

Программирование => Perl => Тема начата: Skif от 03 Августа 2004, 15:17:07

Название: Session - как проверить наличие уже готовой сессии без куков
Отправлено: Skif от 03 Августа 2004, 15:17:07
Собственно сабж. имеется уже готовая сессия с нужными параметрами. но вот на следующем скрипте облом:



my $session = new CGI::Session("driver:File", undef, {Directory=>\'/tmp\'});

$sid=$session->param(_SESSION_ID);

 

Мне выдается другой ID сессии, каждый раз новый, ну и есно все параметры, что я загнал в сессию - NULL.
Вопрос, как инициализировать уже существующую сессию ибо прочтение CGI::Session ни на что не натолкнуло...
Название: Session - как проверить наличие уже готовой сессии без куков
Отправлено: NeoNox от 03 Августа 2004, 16:15:18
perldoc CGI::Session::Tutorial
http://search.cpan.org/~sherzodr/CGI-Session-3.95/Session/CookBook.pm
Название: Session - как проверить наличие уже готовой сессии без куков
Отправлено: Skif от 03 Августа 2004, 16:39:40
Если имеется ввиду строчки а-ля

    $sid = $cgi->cookie(\'CGISESSID\') || $cgi->param(\'CGISESSID\') || undef;
    $session = new CGI::Session(undef, $sid, {Directory=>\'/tmp\'});



Уже пробовал - не работает - у мя куки отключены, а param не считывает...
Название: Session - как проверить наличие уже готовой сессии без куков
Отправлено: Skif от 03 Августа 2004, 16:43:54
Обошел созданием скрытого поля и внесением туда ID  сессии, но это же полумера - мне прийдеться на постой ее кидать в урле...
А хочется скрытой пускать
Название: Session - как проверить наличие уже готовой сессии без куков
Отправлено: NeoNox от 03 Августа 2004, 16:48:13
либо куки либо в урле или в скрытом поле.
другого пока не придумали.
Название: Session - как проверить наличие уже готовой сессии без куков
Отправлено: NeoNox от 03 Августа 2004, 16:49:14
Цитировать
Skif:
а param не считывает...

не верю. покажи скрипт.
Название: Session - как проверить наличие уже готовой сессии без куков
Отправлено: Skif от 03 Августа 2004, 16:59:55
Лови


#!/usr/bin/perl -w
use CGI::Carp qw (fatalsToBrowser);
use CGI::Session;
use DBI;
use CGI qw/:standard/;

my $cgi = new CGI;

sub redir_url {
print $cgi->redirect(-uri=>"auth.pl?auth=Error");
        }

################################################
#
#               Session
#
################################################
my  $sid = $cgi->param(sess) || undef;
my $session = new CGI::Session("driver:File", $sid , {Directory=>\'/tmp\'}) || undef;
#my $sid = $session->param(_SESSION_ID) || undef;

#my $session = new CGI::Session("driver:File", undef, {Directory=>\'/tmp\'}) || undef;


$login=param(name);
$login="\'$login\'";

$table_log="squid_log_";
$operator="operator";
$oper_pass="secret";
$res = "0";
$table_auth="pass_rule";
$passwd=param(pass);

#################################################
#                                               #
#               Open config file                #
#                                               #
#################################################

open (mylog_conf, "/usr/local/script/traff_db/etc/my_log/my_log.conf");
while (){

    ($section,$param)=split(":",$_);
    if ($section eq "table") {
    chomp $param;
    $table=$param;
    }
    if($section eq "operator"){
    chomp $param;
    $operator=$param;
    }
    if($section eq "pass"){
    chomp $param;
    $oper_pass=$param;
    }
    if($section eq "pass_rule"){
    chomp $param;
    $table_auth=$param;
    }


}

close(mylog_conf);

$table_log="$table_log$table";

#################################################
#                                               #
#       Check authentificated                   #
#                                               #
#################################################
my ($dbh,$sth,$count);
$dbh = DBI->connect("DBI:mysql:host=freebsd;database=squid","$operator","$oper_pass")
                or die "cann\'t open db";
$sth = $dbh->prepare("SELECT user_pass FROM $table_auth where user_login=$login"
)
                or die "cann\'t execute select from db table $!";
$sth->execute ();

my $user_pass;
$user_pass = $sth->fetchrow_array();

$sth->finish();
$dbh->disconnect();

$auth="Error";

if((crypt($passwd,$user_pass) ne $user_pass)){
    $auth="Error"
}
else {
    $auth="ok";
}


if ($auth eq "Error") {
   &redir_url;
}
else {
############################################################################
$name_stat=param(name);
$headpage="уФБФЙУФЙЛБ Й МЙЮОЩЕ БРБТФБНЕОФЩ РПМШЪПЧБФЕМС $name_stat";
print $cgi->header(-expires=>\'no cache\');
print $cgi->start_html(-title=>$headpage);
#print "$operator - $oper_pass - $login - $auth - $passwd - $user_pass
";
#################################################
#                                               #
#       Database connect and select column      #
#                                               #
#################################################
print "$operator - $oper_pass - $login - $table_log - $sid";
my ($dbh,$sth,$count);
$dbh = DBI->connect
                ("DBI:mysql:host=freebsd;database=squid","$operator","$oper_pass")
                                                    or die "cann\'t open db table $!";
$sth = $dbh->prepare("SELECT sum(size) FROM $table_log where шdent=$login")
                                                    or die "cann\'t execute select from db table $!";
$sth->execute ();


#################################################
#                                               #
#               Calculate size of traf          #
#                                               #
#################################################
my $size;
$size = $sth->fetchrow_array();


print "
";
    print "";
    print "";
    print   "";
    print   "";
    print   "";

    print "
=\\"0\\" alt=\\"\\">r=\\"0\\" alt=\\"\\">
";


print "";
print " ";
print "";
print "    ";
print "    ";
        print "    ";
        print "    
"top\\">";
        print "
";
        print "    ";
        print "    plication/x-shockwave-flash\\">";
        print "
";

print "    
";

print "";
print "";
print "    ";
        print "    
\\"0\\" align=\\"left\\" alt=\\"\\">";

        print "

";

print "";
print $cgi->h2(\'уФБФЙУФЙЛБ:\');
print "
";

print table({-align=>CENTER,valign=>CENTER,-cellpadding=>2, -border=>2,
    -bordercolordark=>navy, -bordercolorlight=>"#719BF2", -width=>300},caption(\'
\'),
    Tr({-align=>CENTER,-valign=>TOP},
        td ("йНС РПМШЪПЧБФЕМС"),td("тБЪНЕТ ФТБЖЙЛБ, ВБКФ")),
    Tr({-align=>CENTER,-valign=>TOP},
        td ("$name_stat"),td("$size")));

print "    




iv align=\\"justify\\">
                        height=\\"250\\" border=\\"0\\" alt=\\"\\">";
        print "    
";
        print "    
";


$sth->finish();
$dbh->disconnect();

print $cgi->end_html;
}
exit(0);

Название: Session - как проверить наличие уже готовой сессии без куков
Отправлено: Skif от 03 Августа 2004, 17:02:50
Сори


my  $sid = $cgi->param(\'CGISESSID\') || undef;
my $session = new CGI::Session("driver:File", $sid , {Directory=>\'/tmp\'}) || undef;

Название: Session - как проверить наличие уже готовой сессии без куков
Отправлено: Skif от 03 Августа 2004, 17:04:05
Это уже модифицированый с чтением sid из урл-а (верхний вариант)
Название: Session - как проверить наличие уже готовой сессии без куков
Отправлено: NeoNox от 03 Августа 2004, 18:10:31
Ничего не понял...
В первом варианте у тебя
Цитировать

my  $sid = $cgi->param(sess) || undef;

а во втором
Цитировать

my  $sid = $cgi->param(\'CGISESSID\') || undef;

форму где происходит отправка sess я не увидел.
Ты точно там ничего не напутал?
Название: Session - как проверить наличие уже готовой сессии без куков
Отправлено: Skif от 04 Августа 2004, 12:19:04
Извини что поздно - занят очень был
if ($error_auth eq "Error") {
print "

пЫЙВЛБ БЧФПТЙЪБГЙЙ. рПРТПВХКФЕ ЕЭЕ ТБЪ.

";
}
                print table({-align=>CENTER,valign=>CENTER},
                caption(\'

бЧФПТЙЪБГЙС РПМШЪПЧБФЕМС

\'),
                Tr({-align=>CENTER,-valign=>TOP},
                        [
                        th([start_form(-method=>"post",-action=>\'home.pl\')]),
td(["йНС:    ",textfield(-name=>\'name\',-size=>15,-class=>\'bginput\')
                        ]),
                        td(["рБТПМШ: ",password_field(-name=>\'pass\',-size=>15,-class=>\'bginput\')]),
                        td(["",hidden(-name=>\'auth\',-default=>$sid_session)]),
td([\'\',submit{-name=>\'choice\',-value=>\'Ok\'}]),
 
                        td([end_form])
                        ]
                        )
           );
Название: Session - как проверить наличие уже готовой сессии без куков
Отправлено: Skif от 04 Августа 2004, 12:23:25
Это та реализация где я ID сессии пересылаю в урле через скрытое поле. Но мне сие не нравиться и либо я не понял правильно CGI::Session y либо не правильно вызываю его. Объяснюсь: в примерах (выше) мне показалосьб что сам сервер передает этот ID браузеру и нужно лишь правильно выявить его.
Название: Session - как проверить наличие уже готовой сессии без куков
Отправлено: NeoNox от 04 Августа 2004, 14:28:52
Цитировать
Skif:
hidden(-name=>\'auth\',-default=>$sid_session)

а принимаешь ты param(sess).