Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скрипт авторизации 
:(
    Опции темы
Alca
Дата 6.8.2009, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



Цитата

через Ajax

Ajax - это же ActiveX?


--------------------
PM WWW ICQ Skype Jabber   Вверх
gcc
Дата 6.8.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



JavaScript

http://ru.wikipedia.org/wiki/AJAX

Это сообщение отредактировал(а) gcc - 6.8.2009, 16:29
PM WWW ICQ Skype GTalk Jabber   Вверх
Alca
Дата 6.8.2009, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



http://ru.wikipedia.org/wiki/XMLHttpRequest

Добавлено @ 16:36
Опера не держит ActiveX, а Лиса - вроде тоже.

Это сообщение отредактировал(а) Alca - 6.8.2009, 16:38


--------------------
PM WWW ICQ Skype Jabber   Вверх
gcc
Дата 6.8.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



принято использовать JavaScript

PM WWW ICQ Skype GTalk Jabber   Вверх
Alca
Дата 6.8.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



Цитата

принято использовать JavaScript

JavaScript можно отключить


--------------------
PM WWW ICQ Skype Jabber   Вверх
shutffl
Дата 7.8.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 18.8.2008

Репутация: нет
Всего: 3



Господа, я не пропал и внимательно читаю тред. Не всегда есть время прочитать указанную вами документацию - работы сейчас много, переезд очередной на новое место. Даже осмыслить не всегда получается.

Добавлено через 9 минут и 46 секунд
Цитата(Alca @  6.8.2009,  15:54 Найти цитируемый пост)
А если юзер в адресной строке браузера забивает адрес? Эти приколы разве можно как-то прикрутить?
А если скрипты отключены в настройках браузера?

Эм.. Простите конечно, но.. Ну забил пользователь в адресною строку.. И что дальше-то.. Его автоматом на авторизацию кинет или на обрезанный вариант страницы а-ля guest. И все. Если же он даже после авторизации зайдет, то да, он должен стать гостем, так как personalCode отсутствует. Но таких изврщенцев не так много. В основном все по ссылочкам-кнопочкам тыкают.
Пардон.. А как perl-скрипты можно отключить на стороне клиента?? Браузер выдает итоговую страницу, сгенерированную сервером. Server-Side, однако.

Добавлено через 10 минут и 20 секунд
Цитата(Alca @  6.8.2009,  16:39 Найти цитируемый пост)
JavaScript можно отключить 

ActiveX - тоже !!
--------------------
shadowmoon
PM MAIL   Вверх
shutffl
Дата 7.8.2009, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 18.8.2008

Репутация: нет
Всего: 3



Так.. Вроде что-то получилось.

Цель для теста была поставлена следующая:
-- index.pl - стартовая страница сайта с авторизацией
-- afterAuth.pl - тестовая страница для проверки работы сессий.

index.pl
Код

#!/usr/bin/perl

use strict;
use warnings;
use CGI;
use CGI::Carp qw/fatalsToBrowser/;
use CGI::Session qw/-ip_match/;

my $cgi = new CGI;

##############

if ( ($cgi->param("login") ne "") and ($cgi->param("password") ne "") ) {
    if ( ($cgi->param("login") eq "qwe") and ($cgi->param("password") eq "123") ) {
        my $session = new CGI::Session() or die CGI::Session->errstr;
        #my $cookie = $cgi->cookie(-name=>$session->name, -value=>$session->id);

        # Save in session
        #print $session->header(-cookie=>$cookie);
        print $session->header();
        my $pC = "1234567890..32";
        $session->param("pC", $pC);
        $session->expire("+5s");

        # Get from session
        print "Hello, " .$session->param("pC"). "(here name from SQL DB) !!";
        print "<br /><a href=\"afterAuth.pl\">Go</a> to test session page."
    }
    else {
        print $cgi->header();
        print
            $cgi->start_html(),
            $cgi->start_form(-method=>"get", -action=>"index.pl"),
            $cgi->h1("Invalid login and/or password"),
            $cgi->input({-type=>"text", -name=>"login"}),
            $cgi->input({-type=>"password", -name=>"password"}),
            $cgi->submit({-value=>"LogIn", -name=>"loginSubmit"}),
            $cgi->end_form(),
            $cgi->end_html();

    }
}
else {
    print $cgi->header(-title=>"Not auth !!", -charset=>"utf8");

    print
        $cgi->start_html(),
        $cgi->start_form(-method=>"get", -action=>"index.pl"),
        $cgi->input({-type=>"text", -name=>"login"}),
        $cgi->input({-type=>"password", -name=>"password"}),
        $cgi->submit({-value=>"LogIn", -name=>"loginSubmit"}),
        $cgi->end_form(),
        $cgi->end_html();
}


afterAuth.pl
Код

#!/usr/bin/perl

use strict;
use warnings;
use CGI;
use CGI::Carp qw/fatalsToBrowser/;
use CGI::Session qw/-ip_match/;

my $cgi = new CGI;

##############

my $session = CGI::Session->load() or die CGI::Session->errstr;

if ($session->is_expired()) {
    #print $cgi->header();
    #print "Session expired.. <a href=\"index.pl\">Relogin</a>.";
    $session->delete();
}
#if ($session->is_empty()) {
#    $session = $session->new();
#}
if ($session->param("pC") ne "")
{
    print $cgi->header();#-refresh=>"1");

    print "pC: " . $session->param("pC");
}
else
{
    print $cgi->header();
    print "Session expired.. <a href=\"index.pl\">Relogin</a>.";
}



В итоге вроде как работает. Сейссия создается, файл появляется, по окончании работы файл с сессией удаляется.
Есть ли ошибки или замечания. Сразу говорю, что это рабочие(=тестовые, лежащие на сервере; !=итоговые) файлы.
--------------------
shadowmoon
PM MAIL   Вверх
shutffl
Дата 9.8.2009, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 18.8.2008

Репутация: нет
Всего: 3



Так как комментариев нет, то считаю вопрос закрытым.
--------------------
shadowmoon
PM MAIL   Вверх
shutffl
Дата 9.8.2009, 03:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 18.8.2008

Репутация: нет
Всего: 3



Начал переносить на готовый проект и снова непонятки.

index.pl
Код

#!/usr/bin/perl

use strict;
use warnings;
use CGI;
use CGI::Session ( "-ip_match" );
use DBI;
use CGI::Carp qw/fatalsToBrowser/;
use HTML::Template;
use Digest::MD5 qw/md5_hex/;

require "modules/dbConfig.pl";
require "modules/dbFunctions.pl";

# Vars
my $cgi = new CGI;

my $session = CGI::Session->load() or die CGI::Session->errstr();

# Templates
my $tmplMainTop = new HTML::Template(filename=>"templates/mainTop.template", associate=>$session);
my $tmplMainLeft = new HTML::Template(filename=>"templates/mainLeft.template", associate=>$session);
my $tmplMainCenter = new HTML::Template(filename=>"templates/mainCenter.template", associate=>$session);
my $tmplMainBottom = new HTML::Template(filename=>"templates/mainBottom.template", associate=>$session);
my $tmplMainCenterNews = new HTML::Template(filename=>"templates/mainCenterNews.template", associate=>$session);
my $tmplMainCenterVideos = new HTML::Template(filename=>"templates/mainCenterVideos.template", associate=>$session);

#print $cgi->header(-title=>"text/html", -charset=>"utf8");

# DataBase
my $dbConn = DBI->connect("DBI:Pg:dbname=$dbConfig::dbName", $dbConfig::dbUser, $dbConfig::dbPassword) or die DBI->errstr();

# Session check
if ($session->is_expired()) {
  $session->delete();
  $tmplMainTop->param(afterAuth=>0);
}

# If wanna log in
if ( ($cgi->param("login") ne "") and ($cgi->param("password") ne "") ) {
  my $md5Password = md5_hex($cgi->param("password"));
  my ($rows, $sth) = &dbFunctions::doSelect($dbConn, "SELECT password FROM as_users WHERE \"login\"='".$cgi->param("login")."'");
  if ($rows == 1) {
    my $password = &dbFunctions::getUserPassword($sth);
    if ( $md5Password eq $password ) {
      print $session->header();
      my $personalCode = md5_hex($cgi->param("login") . localtime(time));
      my ($authorId, $groupId);
      ($rows, $sth) = &dbFunctions::doSelect($dbConn, "SELECT id FROM as_users WHERE \"login\"='".$cgi->param("login")."'");
      if ($rows == 1) {
        $authorId = &dbFunctions::getAuthorId($sth);
      }
      ($rows, $sth) = &dbFunctions::doSelect($dbConn, "SELECT \"idGroup\" FROM as_users WHERE \"login\"='".$cgi->param("login")."'");
      if ($rows == 1) {
        $groupId = &dbFunctions::getGroupId($sth);
      }
      $session = new CGI::Session or die CGI::Session->errstr();
      print $session->header(-type=>"text/html", -charset=>"utf8");
      $session->param("personalCode", $personalCode);
      $session->param("login", $cgi->param("login"));
      $session->param("authorId", $authorId);
      $session->param("groupId", $groupId);
      $session->expire("+30m"); # 30 minutes session
      $tmplMainTop->param(afterAuth=>1);
    }
  }
}

if ($session->id() eq "") {
  print $cgi->header();
}

# Action check
if ($cgi->param("a") eq "logout") {
  $session->delete();
  $cgi->header(-refresh=>"");
}

# Page creation
print $tmplMainTop->output();
print $tmplMainLeft->output();
print $tmplMainCenter->output();
print $tmplMainBottom->output();

# DataBase
$dbConn->disconnect();


В результате получаю страницу со следующим кодом:
Код

Set-Cookie: CGISESSID=90847fc6c7b6c918da575e6b3c863598; path=/
Date: Sun, 09 Aug 2009 00:31:49 GMT
Content-Type: text/html; charset=utf8

<html>
  <head>
    <title>


Где косяк??
--------------------
shadowmoon
PM MAIL   Вверх
shutffl
Дата 9.8.2009, 04:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 18.8.2008

Репутация: нет
Всего: 3



Сам же и нашел.. Второй раз написал print $session->header();

 Теперь следующее.. associate=>$session не хочет работать. То есть в шаблоне написано 
Код

<TMPL_VAR NAME="login">

, а не ставляется. Так же пробовал писать 
Код

<TMPL_VAR login>

как в примере из документации CGI::Session.
--------------------
shadowmoon
PM MAIL   Вверх
shutffl
Дата 9.8.2009, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 18.8.2008

Репутация: нет
Всего: 3



Разобрался..
--------------------
shadowmoon
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.