Автор Тема: кириллица в cookies  (Прочитано 2568 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн deft

  • Коллежский регистратор
  • *
  • Сообщений: 2
  • Репутация: 0
кириллица в cookies
« : ґХЪРСам 30, 2008, 02:44:42 pm »
устанавливаю куки через Set-Cookie
читаю так:
$buffer=$ENV{'HTTP_COOKIE'};
@pairs = split(/; /, $buffer);
foreach $pair (@pairs) {
  ($name, $value) = split(/=/, $pair);$value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $in{$name} = $value;}

работает только с латиницей, что поменять чтоб и с кириллицей пахало?
 

Оффлайн usmanec

  • Коллежский регистратор
  • *
  • Сообщений: 10
  • Репутация: 0
Re: кириллица в cookies
« Ответ #1 : ДХТаРЫм 12, 2009, 05:13:16 pm »
Вобщето нецелесообразно гонять большое количество данных в заголовках запроса. Проще пользователю присвоить идентификатор и все хранить на сервере.
А вобще перед тем как установить кукис нужно преобразовать недопустимые символы.

sub setcookie(%){
    my(%cook)=@_;
    my(@cook,$name,$value);
    foreach $name (keys %cook){
         $value=$cook{$name};
         $value=~s/([=\+&%\/\\\|\0-\x1f\x80-\xff])/sprintf("%%%02X",unpack('C',$1))/eg;
         $value=~y/ /+/;
         $name=~s/([=\+&%\/\\\|\0-\x1f\x80-\xff])/sprintf("%%%02X",unpack('C',$1))/eg;
         $name=~y/ /+/;
         push(@cook,"$name=$value");
         }
    return join('; ',@cook);
    }
print setcookie(
                               'Параметр1' => 'Значение1',
                               'Параметр2' => 'Значение2',
                               'ПараметрN' => 'ЗначениеN',
                               'Name'      => 'V a l u e',
                               )."\n";
В результате получим следующую строку
%CF%E0%F0%E0%EC%E5%F2%F01=%C7%ED%E0%F7%E5%ED%E8%E51; %CF%E0%F0%E0%EC%E5%F2%F02=%C7%ED%E0%F7%E5%ED%E8%E52; Name=V+a+l+u+e; %CF%E0%F0%E0%EC%E5%F2%F0N=%C7%ED%E0%F7%E5%ED%E8%E5N
« Последнее редактирование: ДХТаРЫм 24, 2009, 03:10:02 pm от usmanec »