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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Cookie Запись, проверка, выход 
:(
    Опции темы
MaxPayne
Дата 1.4.2008, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Для установки куков использую

my $query = CGI->new;
print $query->header(-cookie => $query->cookie(-name => ses, -value => $ses, -expires =>  '+1M'));
---------------------------------------------------------
Для проверки использую

$q = CGI->new();
$vc = $q->cookie('ses');

Если $vc чтото есть - значит кука есть.
-----------------------------------------------------------
Для выхода использую

$q = CGI->new();
$vc = $q->cookie('ses');

$dbh = DBI -> connect("DBI:mysql:***:localhost", "", "");
$dbh -> do("UPDATE user set temp='' WHERE temp = '$vc'");
$dbh -> disconnect();

$q = CGI->new;
$cookie = $q->cookie(-name => ses, -value => $vc, -expires => '-1m');
-----------------------------------------------------------
Все ли правильно здесь описано? Выхода из куков не происходит. Из базы стирается ключ, но сама кука остается. Я писал срок и -1М и now, как где то было уже описано. Но не получается. В чем может быть проблема.
PM MAIL WWW ICQ   Вверх
Itsys
Дата 1.4.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



print $query->header(-cookie => $query->cookie(-name => ses, -value => $vc, -expires =>  'now'));

Куки ты создал, а в заголовок кто его будет запихивать?


Это сообщение отредактировал(а) Itsys - 1.4.2008, 16:59
PM MAIL WWW Skype   Вверх
MaxPayne
Дата 2.4.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Т.е. для выхода с куков добаляю в конце строку (выделена жирным)

$q = CGI->new();
$vc = $q->cookie('ses');

$dbh = DBI -> connect("DBI:mysql:***:localhost", "", "");
$dbh -> do("UPDATE user set temp='' WHERE temp = '$vc'");
$dbh -> disconnect();

$q = CGI->new;
$cookie = $q->cookie(-name => ses, -value => $vc, -expires => '-1m');
print $query->header(-cookie => $query->cookie(-name => ses, -value => $vc, -expires =>  'now')); 

или 

print $q->header(-cookie => $q->cookie(-name => ses, -value => $vc, -expires =>  'now')); 


PM MAIL WWW ICQ   Вверх
Itsys
Дата 2.4.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



ну конечно вторую, это я посто копировал и не посмортел исходную переменную  smile 
PM MAIL WWW Skype   Вверх
MaxPayne
Дата 3.4.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо.
PM MAIL WWW ICQ   Вверх
MaxPayne
Дата 10.4.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Блин выход запарил - не выходит. Уже и браузер закрыл, открыл - не помогает.
Может кто подскажет. ПРоблем с входом и проверкой на наличие нет.
ПРивожу код скритп по выходу.

Код

#!/usr/bin/perl
use CGI qw(:all);
use DBI;

$q = CGI->new();
$vc = $q->cookie('ses');

#$dbh = DBI -> connect("DBI:mysql:***:localhost", "", "");
#$dbh -> do("UPDATE user set temp='' WHERE temp = '$vc'");
#$dbh -> disconnect();

print $q->header(-cookie => $q->cookie(-name => ses, -value => $ses, -expires =>  '-1M'));

print "<script language='javascript'> location.href='http://www.***.ru/' </script>";
exit;

PM MAIL WWW ICQ   Вверх
GoDleSS
Дата 10.4.2008, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



MaxPayne, редирект проще сделать в том же хидере, зачем жабаскрипт пуляешь?!
--------------------
It's a nice day to die my friend!
PM MAIL WWW ICQ   Вверх
MaxPayne
Дата 11.4.2008, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Поскажите как - сделаю. Но главная проблема что куки не стираются.
PM MAIL WWW ICQ   Вверх
Itsys
Дата 12.4.2008, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



Попробуй так:
Код

#!/usr/bin/perl
use CGI qw(:all);
use DBI;

$q = CGI->new();
$vc = $q->cookie('ses');

#$dbh = DBI -> connect("DBI:mysql:***:localhost", "", "");
#$dbh -> do("UPDATE user set temp='' WHERE temp = '$vc'");
#$dbh -> disconnect();
print "Content-type: text/html\n\n";

print $q->header(-cookie => $q->cookie(-name => ses, -value => $ses, -expires =>  '-1M'));

#print "<script language='javascript'> location.href='http://www.***.ru/' </script>";
exit;

и посмотри что он выведет в качестве заголовка
PM MAIL WWW Skype   Вверх
MaxPayne
Дата 12.4.2008, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Set-Cookie: o2yql0nWos4QwxBPYpsIzul1rmdulR
Date: Sat, 12 Apr 2008 02:30:56 GMT
Content-Type: text/html; charset=ISO-8859-1


В базе MySQL занесена таже сессия: o2yql0nWos4QwxBPYpsIzul1rmdulR
Т.е. все верно.


Аммм. А дата должна выводиться как -1 месяц? Март?

Это сообщение отредактировал(а) MaxPayne - 12.4.2008, 09:36
PM MAIL WWW ICQ   Вверх
Itsys
Дата 12.4.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



У тебя получается не правильная строка с Куками:
Формат Set-Cookie      
Set-Cookie: name=[значение]; path=[путь]; expires=[дата]; domain=[домен]; secure

Добавлено через 3 минуты и 58 секунд
просто если не указано 
Цитата(Itsys @  12.4.2008,  10:02 Найти цитируемый пост)
expires=[дата]; 

то считается, что куки акивны до тех пор, пока открыто окно браузера.
я, обычно для задания куков пользуюсь модулем CGI::Cookie 
PM MAIL WWW Skype   Вверх
MaxPayne
Дата 12.4.2008, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Т.е. куки изначально не правильно ставятся?
PM MAIL WWW ICQ   Вверх
Itsys
Дата 12.4.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



да

Добавлено через 1 минуту и 23 секунды
посмотри таким же образом что устанавливается при инициализации куков
PM MAIL WWW Skype   Вверх
MaxPayne
Дата 12.4.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



При установке вот так:
Set-Cookie: ses=4vwFiykSzO3BMkXNpMsKKpgKhugdwr; path=/; expires=Mon, 12-May-2008 09:38:47 GMT Date: Sat, 12 Apr 2008 09:38:47 GMT Content-Type: text/html; charset=ISO-8859-1 


Ставлю вот таким образом:
Код

my $query = CGI->new();
print $query->header(-cookie => $query->cookie(-name => ses, -value => $ses, -expires =>  '+1M'));

PM MAIL WWW ICQ   Вверх
Itsys
Дата 13.4.2008, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



Значит его глючит на "-1М", попробуй "now"
PM MAIL WWW Skype   Вверх
MaxPayne
Дата 14.4.2008, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Itsys @ 13.4.2008,  07:37)
Значит его глючит на "-1М", попробуй "now"

Если Вы используете use CGI::Cookie; не могли бы привести пример как вы ставите куку, читаете и стираете (стираете я так понял равно ставить с датой now или -ДАТА). 
PM MAIL WWW ICQ   Вверх
Itsys
Дата 15.4.2008, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



А Документацию читал?
PM MAIL WWW Skype   Вверх
MaxPayne
Дата 15.4.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Может на форуме после первого вопроса отправлять к документации и закрывать тему? Читал. Выкладывал сюда примеры, читал то что уже писали на этом форуме, тестировал у себя, читал документацию, пробовал другие формы записи куков, опять читал. В итоге запутавшись окончательно  пришел сюда.
PM MAIL WWW ICQ   Вверх
Itsys
Дата 15.4.2008, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



MaxPayne, не кипятись, просто если чего не понятно в документации ты скажи, попробуй установить время now, и посмотри что выводит заголовок.
PM MAIL WWW Skype   Вверх
MaxPayne
Дата 17.4.2008, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я сделал пробник http://www.3fun.ru/cgi-bin/zzlogin.cgi

Но теперь войти не могу даже. Вилы.

Логин и пароль там test (уже подставлены) 



Ставлю куки как
Код

$c = new CGI::Cookie(-name => 'ses',
             -value => "$ses",
             -expires => '+3M',
             -path => '/'
             -secure => 1
);
print header(-cookie=>$c);
print "<script language='javascript'> location.href='http://www.3fun.ru/cgi-bin/zzlogin.cgi' </script>";


Первая часть такая же как в доках, а вторая часть "print header(-cookie=>$c);"у меня идет так, в доках же написано
Код

$c->bake;

или
Код

print "Set-Cookie: $c\n";
print "Content-Type: text/html\n\n";



Это сообщение отредактировал(а) MaxPayne - 17.4.2008, 10:20
PM MAIL WWW ICQ   Вверх
ginnie
Дата 17.4.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



MaxPayne, советую внимательно почитать про параметр -secure.

Это сообщение отредактировал(а) ginnie - 17.4.2008, 11:15


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
MaxPayne
Дата 17.4.2008, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ginnie, знаючто для https://. Убрал я его. Но ничего не изменилось


Еще такой момент - принципиально ли для куков какой уровень домена?:

http://www.url.ru/
http://url.ru/


Это сообщение отредактировал(а) MaxPayne - 17.4.2008, 13:51
PM MAIL WWW ICQ   Вверх
ginnie
Дата 17.4.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



MaxPayne, можно посмотреть код zzlogin.cgi?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
MaxPayne
Дата 17.4.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



zzlogin.cgi

Код

#!/usr/bin/perl
use CGI qw(:all);
use CGI::Cookie;
use DBI;

$r=$ENV{'QUERY_STRING_UNESCAPED'};

$q = CGI->new();
$vc = $q->cookie('ses');

$dbh = DBI -> connect("DBI:mysql:3fun:localhost", "", "");
$sth = $dbh->prepare("SELECT * FROM user WHERE temp='$vc'");
$sth->execute;
@ref = $sth->fetchrow_array;
$log=$ref[3];
$sth->finish();
$dbh -> disconnect();



print "Content-Type: text/html\n\n";

if ($log)
{
print qq|
    <td width="100%" ><img width="348" height=1 src="/img/px.gif" usemap="#main">
    <p align=left><b>$log</b><br/><br/>    <a href='/cgi-bin/zzexit.cgi?r=$r'>выход</a>
    |;
}
else
{
    print qq|
    <td id="login_form">
    логин<br/> <form action='/cgi-bin/zzgo.cgi' method="post"><input type="text" id="login" name="l" value="test"> 
    пароль<br/> <input type="password" id="password" name="p" value="test"><INPUT id="lok" 
    TYPE="IMAGE" SRC="/img/ok.jpg" ALT="Submit button"></form>
    $vc, $log
     <a href="/cgi-bin/reg.cgi?r=$r">регистрация</a><br/><a href="/cgi-bin/recover.cgi?r=$r">забыли пароль?</a>
    |;
}

exit;


Это сообщение отредактировал(а) MaxPayne - 17.4.2008, 13:53
PM MAIL WWW ICQ   Вверх
ginnie
Дата 17.4.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



MaxPayne, домен принципиален. Чтобы работало на всех, надо указывать '.url.ru'.

При заходе на тестовую страницу (http://www.3fun.ru/cgi-bin/zzlogin.cgi) у меня выдает Max Payne и выход  smile 


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
MaxPayne
Дата 17.4.2008, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Т.е надо писать не
-path => '/'
а
-path => '.url.ru'


А выйти вы можете? 
PM MAIL WWW ICQ   Вверх
ginnie
Дата 17.4.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



MaxPayne, для домена отдельный параметр 

Код

-domain  =>  '.url.ru',



Выйти не могу. Посмотрел что происходит при взаимодействии с Вашими скриптами.

При нажатии на выход zzexit.cgi ставит cookie 'ses' с пустым значением и путем '.3fun.ru' (это, наверное, Вы экспериментируете). Время устаревания 'Thu, 17-Apr-2008 07:37:14 GMT' (это в 15:35 MSK). Заголовки смотрю при помощи плагина HttpWatch для IE.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
MaxPayne
Дата 21.4.2008, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ginnie, 
НУ поидее выход это установка куков с датой устаревания now. Т.е. поидее это нормально то что он ставит такую куку.

Плагин HttpWatch нашел, но он платный.
PM MAIL WWW ICQ   Вверх
shamber
Дата 21.4.2008, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



MaxPayne, поставте proxomitron он как прокси работает, бесплатный и можно просматривать запросы.
PM MAIL Jabber   Вверх
MaxPayne
Дата 22.4.2008, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ginnie, Странно что ставит пустую, ведь из базы нужная кука удаляется.

zzexit.cgi

Код

#!/usr/bin/perl
use CGI qw(:all);
use CGI::Cookie;
use DBI;

$q = CGI->new();
$vc = $q->cookie('ses');

$dbh = DBI -> connect("DBI:mysql:3fun:localhost", "***", "***");
$dbh -> do("UPDATE user set temp=\"\" WHERE temp = \"$vc\"");
$dbh -> disconnect();

$c = new CGI::Cookie(-name => 'ses',
             -value => "$vc",
             -expires => 'now',
             -path => '/',
             -domain  =>  '.3fun.ru',
);
print header(-cookie=>$c);

print "<script language='javascript'> location.href='http://www.3fun.ru/cgi-bin/zzlogin.cgi' </script>";
exit;


Может есть фишка еще в кавычках? В раличном написании: ' или ".


Это сообщение отредактировал(а) MaxPayne - 22.4.2008, 15:42
PM MAIL WWW ICQ   Вверх
tolkien
Дата 22.4.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Протокол работ кук очень простой. Реализуйте свой модуль.
PM MAIL   Вверх
KSURi
Дата 22.4.2008, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(tolkien @ 22.4.2008,  17:19)
Протокол работ кук очень простой. Реализуйте свой модуль.

IMHO не хороший совет. Зачем человеку изобретать очередной велосипед (даже не "велосипед", а "велосипедище")?
Нужно просто получше почитать документацию по CGI::Cookie и RFC 2965.

У меня работает вот такой код (кука нормально удаляется, FF2.0.14):
Код

#...
# LogIn
return CGI->cookie(-name    => 'CGISESSID',
                -value   => $session_key,
                -expires => '+1h');
#...
# LogOut
return CGI->cookie(-name    => 'CGISESSID',
                -value   => '',
                -expires => 'now');
#...
exit print $cgi->header(-charset  => 'windows-1251',
                        -cookie   => $res,
                        -location => 'http://' . $ENV{SERVER_NAME} . ($isLoggedIn ? $success_redirect : $failure_redirect))



Это сообщение отредактировал(а) KSURi - 22.4.2008, 18:50


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
MaxPayne
Дата 22.4.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



tolkien, 
Научи меня летать учитель - летать очень легко сказал учитель и улетел

KSURi, 
Все просто когда уже работал с этим. Дело в том что с куками возился год назад, но как и щас чтото получилось чтото нет. Когда в сумме все не работает, "организм" в целом мертв.
Документацию читал, но опять же может не все понимаю по английски - что не понятно уже писал на прошлой странице. Вопрос в принципе в следующем - почему не работает ВЫХОД. Пример тоже на прошлой странице. 

То что вариантов реализаций много я понял - и это как раз и сбивает.


PM MAIL WWW ICQ   Вверх
KSURi
Дата 22.4.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



MaxPayne, зашел на ваш линк (http://www.3fun.ru/cgi-bin/zzlogin.cgi). При входе куки не устанавливаются, при нажатии на "Выход" (кстати параметр r для zzexit.cgi пуст, так и должно быть?) устанавливается пустая кука ses (ну т.е. в запросе ее установку видно, но в браузере она не сохраняется).

Я не совсем понял где все-таки баг... В любом случае попробуйте использовать код для установки кук, который я привел выше.

ЗЫ: в вашем случае редирект имхо лучше будет сделать через <meta name="refresh">


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
MaxPayne
Дата 24.4.2008, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



KSURi, Меня смущает return. Что мне нужно поставить вместо:?

Код

$c = new CGI::Cookie(-name => 'ses',
             -value => "$ses",
             -expires => '+3M',
             -path => '/',
             -domain  =>  '.3fun.ru',
 
);
print header(-cookie=>$c);

PM MAIL WWW ICQ   Вверх
KSURi
Дата 24.4.2008, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня стоит return потому, что куки возвращают несколько ф-ий, соответственно это просто отрывоки из них. Привел я их для того, чтобы показать, что необязательно указывать параметры -path, -domain и т.д.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
MaxPayne
Дата 28.4.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



KSURi, домен я поставил для того чтобы и www.3fun.ru и 3fun.ru восринимались как один для кук.

Вроде заработало
Если будет возможность проверьте у себя: http://www.3fun.ru/cgi-bin/zzlogin.cgi
Логин и пароль test (уже подставлены)

Проблемы были 2:
1) Если куки были пустые в базе все равно находились записи с пустым полем и выдавало первую попавшуюся
2) По всей видимости надо было писать переменную не в кавычках: -value => "$ses"

Если все работает могу дать кодинг трех файлов (вход, выход и форма)
PM MAIL WWW ICQ   Вверх
shamber
Дата 28.4.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



MaxPayne, потестировал. На этой странице ничего не происходит. т.е. 
было такое окно
user posted image

после нажатия OK, тоже самое.
Так и должно быть?
З.Ы. В опере тестировал


Это сообщение отредактировал(а) shamber - 28.4.2008, 18:01
PM MAIL Jabber   Вверх
MaxPayne
Дата 28.4.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



shamber, дома перестало все работать. Не могу зайти. Так же не должно быть  smile 

Как завелась кука на компе, так больше не могу войти - новая кука не накладывается одна на другую при новом входе.

Это сообщение отредактировал(а) MaxPayne - 28.4.2008, 22:36
PM MAIL WWW ICQ   Вверх
shamber
Дата 29.4.2008, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Видимо у меня тоже есть старая кука.
Я его тестировал когда Вы только доступ предложили smile

Это сообщение отредактировал(а) shamber - 29.4.2008, 08:50
PM MAIL Jabber   Вверх
MaxPayne
Дата 29.4.2008, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



shamber, Блин на работе все ок (Vista SP1 + IE 7)

Должно быть вот это:

user posted image
PM MAIL WWW ICQ   Вверх
shamber
Дата 30.4.2008, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



user posted image

Это в опере. Просто я с ее помощью заходил на Ваш сайт, когда скрипт не совсем корректно работал.

А В IE6 все нормально, т.к. я его не использовал раньше для вашего сайта. smile

P.S. ИМХО можно не заморачиваться, я думаю людей со старыми куками не так много smile

Это сообщение отредактировал(а) shamber - 30.4.2008, 08:25
PM MAIL Jabber   Вверх
Itsys
Дата 30.4.2008, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



Цитата(shamber @  30.4.2008,  08:15 Найти цитируемый пост)
P.S. ИМХО можно не заморачиваться, я думаю людей со старыми куками не так много 

Не скажи, а если пользователь не нажмет кнопку "Выйти", а запись о его сессии с сервера удалится и при следующем заходе опять будет такая же ситуация.... я с такими случаями уже сталкивался.
Надо при получении куки от пользователя проверять наличие в базе соответсвующей записи, и, в случае, если ее нет, перезаписывать куки на новые.
PM MAIL WWW Skype   Вверх
shamber
Дата 30.4.2008, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Itsys, я имел в виду конкретно этот пример. smile 
А то что надо перезаписывать это правильно.
MaxPayne, вы же уже разобрались с перезаписью?
PM MAIL Jabber   Вверх
MaxPayne
Дата 1.5.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



shamber, не совсем. Как и на приведенном вами рисунке - Записанная кука есть, но в базе ее нет, поэтому выводит форму. Но когда жму войти проверяется логин и пароль, в базу заносится новая кука и записывается на комп. Но в тот то и дело что кука не перезаписывается - т.е. не накладывается поверх.
PM MAIL WWW ICQ   Вверх
Vavilen
Дата 12.7.2009, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте!
Проблема такова:
не могу передать куку броузеру
вот кусок модуля:
Код

sub render_page {
    my $self = shift;
    my ($tmpl_file, $params) = @_;
    my $cookie =$self->_cookie();
    
    $tmpl_file || die "Expected tmpl file!";
    my $tmpl = HTML::Template -> new (filename => $tmpl_file, die_on_bad_params => 0);
    $tmpl -> param (EMPLOYEE_INFO => $params) if ref $params eq 'ARRAY';
    $tmpl -> param($params) if ref $params eq 'HASH';
       print "Content-Type: text/html\n\n";
       print "Set-Cookie: $cookie\n";
    print $tmpl->output;
}

При этом кука выводится на экран в броузее, а не передается в заголовке smile
пробовал по аналогии с документации CGI::Cookie, то есть:
If you want to set the cookie yourself, Within a CGI script you can send a cookie to the browser by creating one or more Set-Cookie: fields in the HTTP header. Here is a typical sequence:
Код

my $c = new CGI::Cookie(-name    =>  'foo',
                          -value   =>  ['bar','baz'],
                          -expires =>  '+3M');

  print "Set-Cookie: $c\n";
  print "Content-Type: text/html\n\n";

В этом случае кука вообще никак не передается.
Подскажите, пожалуйста, в чем проблема?
PM MAIL   Вверх
KSURi
Дата 13.7.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

       print "Content-Type: text/html\n\n";
       print "Set-Cookie: $cookie\n";

Найдите отличие своего кода от примера CGI::Cookie. Вы отделили заголовки от контента слишком рано.

ЗЫ: кстати, насколько я помню, по RFC правильно делать "\r\n" x 2, а не "\n\n"

Это сообщение отредактировал(а) KSURi - 13.7.2009, 15:05


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


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

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


 




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


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

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