IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Проблема с получением cookie (http://www.imho.ws/showthread.php?t=60729)

Diamoon 03.06.2004 19:52

Проблема с получением cookie
 
Сделал на сайте такую схему:
посетитель регистрируется, ему устанавливаются куки, после этого он может воспользоваться разделом. Тут все нормально, но если войти в этот раздел без регистрации (т.е. если куки не установлены) скрипт должен выдать "незарегистрирован", но браузер рисует пустую страницу.

Код такой:

if($ENV{'HTTP_COOKIE'}){
%cookies = fetch CGI::Cookie;
$str = $cookies{'name'}->value;
}
else {$str="guest";}

Подскажите, в чем ошибка?

Hubbitus 04.06.2004 01:40

Я думаю что проблема в том что $ENV{'HTTP_COOKIE'} почти всегда выдает true, даже если конкретно $cookies{'name'}->value ничего и не содержит... попробуй, определять по конкретной переменной, ну например так (или что-то вроде):
Код:

%cookies = fetch CGI::Cookie;
$str = $cookies{'name'}->value;
if($str){
}
else {$str="guest";}


Diamoon 04.06.2004 09:05

Цитата:

Сообщение от Hubbitus
Я думаю что проблема в том что $ENV{'HTTP_COOKIE'} почти всегда выдает true, даже если конкретно $cookies{'name'}->value ничего и не содержит... попробуй, определять по конкретной переменной, ну например так (или что-то вроде):
Код:

%cookies = fetch CGI::Cookie;
$str = $cookies{'name'}->value;
if($str){
}
else {$str="guest";}


Я пробовал и такой код, не работает. Дело в том, что когда скрипт встречает $ENV{'HTTP_COOKIE'} и если куки не были установлены, он просто не выполняет оставшийся код, и получается пустая страница

Hubbitus 04.06.2004 12:57

Цитата:

Diamoon:
Я пробовал и такой код, не работает.
Почему, в чем ошибка?
Цитата:

Diamoon:
Дело в том, что когда скрипт встречает $ENV{'HTTP_COOKIE'} и если куки не были установлены, он просто не выполняет оставшийся код, и получается пустая страница
Наверное, только в моем примере он не втречает нигде $ENV{'HTTP_COOKIE'}, при чем здесь это?

Diamoon 04.06.2004 16:36

Если бы я знал где ошибка я бы на форум не обратился :)
Код:


%cookies = fetch CGI::Cookie;
$str = $cookies{'name'}->value;
if($str){
}
else {$str="guest";};

Если куки не были установлены он на этом куске останавливается и дальнейший код не выполняет, выдается пустая страница.
Я подумал сделать проверку на существование переменной
Код:

if($ENV{'HTTP_COOKIE'})
{
...
}

тоже самое :(

Hubbitus 04.06.2004 17:18

Вот работающий код, надеюсь все понятно :) Если нет, спрашивай.
Код:

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

if (defined cookie('name')) {
print header;
$str=cookie('name');
}
else {
$test_cookie=cookie(-name => 'name',
-value => 'My Name',
-expires => '+2m' );
print header(-cookie => $test_cookie);
$str="Guest";
}
print $str;


Diamoon 04.06.2004 18:09

Спасибо, теперь работает.
Только все равно непонятно, почему прежний код
Код:

use CGI::Cookie;
if($ENV{'HTTP_COOKIE'}){
%cookies = fetch CGI::Cookie;
$str = $cookies{'name'}->value;
}
else {$str="guest";}

не работал :)

Цитата:

Я думаю что проблема в том что $ENV{'HTTP_COOKIE'} почти всегда выдает true, даже если конкретно $cookies{'name'}->value ничего и не содержит...
Код:

$str=$ENV{'HTTP_COOKIE'};
if($str ne ""){
%cookies = fetch CGI::Cookie;
$str = $cookies{'name'}->value;
}
else {$str="guest";}

По идее должно работать, но тоже не работает.

Hubbitus 04.06.2004 18:28

Незнаю, я вообще не любитель так мучаться, просто ты спросил я помог...
Я пишу на ПХП обычно чтобы какраз не думать о таких геморроях.... (никого не хочу обидеть, и не надо плиз здесь со мной спорить натему "PHP vs PERL"...)


Часовой пояс GMT +4, время: 14:42.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.