Автор Тема: Символ "\\n" в значении cookie-переменной.  (Прочитано 4510 раз)

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

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Привет все!
Я кодирую значение переменной и отправляю её как сookie.
Среди прочих символов встречается символ "\\n". Как быть?
Какие ещё символы могут навредить.

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Символ "\\n" в значении cookie-переменной.
« Ответ #1 : 04 Июня 2002, 13:44:00 »
Вот, немного потестировал, получил ещё символы, которые нехороши:
Конечно же \'=\' и \';\' - это логично.
Потом 0x0D - можно понять
0x88 - это уже непонятно.

Есть ли ещё какие-нибудь?
Подскажите пожалуйста.

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Символ "\\n" в значении cookie-переменной.
« Ответ #2 : 11 Июня 2002, 18:42:27 »
Не у кого так и нет никаких идей?
Я каждый символ его кодом заменил (числом) и \';\'-ой разбил, но это как-то коряво выглядит.
Что говорит стандандарт о вышеописанных символах?

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Символ "\\n" в значении cookie-переменной.
« Ответ #3 : 26 Июня 2002, 00:20:46 »
Вроде бы \'=\' не вызывает проблем, а ";" видимо нужно заменять.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Символ "\\n" в значении cookie-переменной.
« Ответ #4 : 26 Июня 2002, 14:32:50 »
Цитировать
Вроде бы \'=\' не вызывает проблем

Почему же. Ведь если в значении переменной \'=\' стоит, то как определить, где имя переменной заканчивается, а где значение начинается?
Вот пример:
"var1=name1;var2=name2=name;"
По-моему \'=\' лучше тоже заменять...

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Символ "\\n" в значении cookie-переменной.
« Ответ #5 : 27 Июня 2002, 09:21:12 »
Определить легко - для разделения разных cookie достаточно одного символа-разделителя -";". А для отделения имени от значения используется только первое "=".

Я проверял: второе "=" не вызывает проблем,
ты можешь убедиться сам.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Символ "\\n" в значении cookie-переменной.
« Ответ #6 : 01 Июля 2002, 18:50:10 »
Цитировать
Определить легко - для разделения разных cookie достаточно одного символа-разделителя -";". А для отделения имени от значения используется только первое "=".

Я проверял: второе "=" не вызывает проблем,
ты можешь убедиться сам.

Да, всё правильно, только это нужно учитывать если сам куки анализируешь, т.е. это не прокатит:

($name,$val)=split(/=/,"name=long=value");

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Символ "\\n" в значении cookie-переменной.
« Ответ #7 : 01 Июля 2002, 21:31:44 »
Неужели?

А так:
$val=($ENV{\'HTTP_COOKIE\'}=~/$name=([^;]+)/)[0];
Ты же сам писал эту куку, значит имя знаешь, следовательно и значение вытащить сможешь. Для нескольких cookie-переменных можно и цикл организовать, например такой:

foreach (qw(name1 name2 name3))
{
${$_}=($ENV{\'HTTP_COOKIE\'}=~/$_=([^;]+)/)[0];
}
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Символ "\\n" в значении cookie-переменной.
« Ответ #8 : 03 Июля 2002, 19:52:03 »
Цитировать
Неужели?


$ENV{\'HTTP_COOKIE\'}="name1=name2=1;name2=2";

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Символ "\\n" в значении cookie-переменной.
« Ответ #9 : 04 Июля 2002, 02:22:38 »
Ну, вот это, вроде, всегда должно работать:

foreach (qw(name1 name2 name3))
{
${$_}=($ENV{\'HTTP_COOKIE\'}=~/(?}
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Символ "\\n" в значении cookie-переменной.
« Ответ #10 : 04 Июля 2002, 12:05:14 »
Цитировать
Ну, вот это, вроде, всегда должно работать:

По-моему, самое правильное слово здесь - "вроде". :)


$ENV{\'HTTP_COOKIE\'}="name1=name2=1;name2=2";

foreach (qw(name1 name2 name3))
{  ${$_}=($ENV{\'HTTP_COOKIE\'}=~/(?   print $_."=".${$_}."\\n";
}

Вывод (версия Perl 5.6.0):
name1=name2=1
name2=
name3=


Лично я решил отказаться от знака \'=\' в куках. :)

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Символ "\\n" в значении cookie-переменной.
« Ответ #11 : 04 Июля 2002, 17:55:25 »
Цитировать
Лично я решил отказаться от знака \'=\' в куках.

Сдаешся? Это не спортивно! :)
Сейчас разберемся с этими куками;)

Все правильно. В твоем $ENV{\'HTTP_COOKIE\'} после точки с запятой нет пробела. Я точно не помню, может ли такое быть на самом деле. Т.е. что является разделителем - точка с запятой, точка с запятой + пробел или могут быть оба варианта?...

Вечером проверю и напишу работающий вариант.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Символ "\\n" в значении cookie-переменной.
« Ответ #12 : 04 Июля 2002, 20:44:10 »
Пожалуйста, можно и пробел после точки с запятой поставить (только как назло о ещё и в значении предыдущей переменной появляется :)):

$ENV{\'HTTP_COOKIE\'}="name1= name2=1; name2=2";
;)

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Символ "\\n" в значении cookie-переменной.
« Ответ #13 : 04 Июля 2002, 21:43:01 »
Разделитель - точка с запятой + пробел.


На входе:
$ENV{\'HTTP_COOKIE\'}="name1= name2=1; name2=2; name3=name 3";

Код:
foreach (qw(name1 name2 name3))
{
${$_}=($ENV{\'HTTP_COOKIE\'}=~/(^|(?<=; ))$_=([^;]+)/)[1];
print $_.": ".${$_}."\\n";
}

На выходе:
name1: name2=1
name2: 2
name3: name 3


Так пойдет? ;)

Только использовать пробел в cookie мне даже в голову не приходило. И не уверен, можно ли (нужно ли) это это делать.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Символ "\\n" в значении cookie-переменной.
« Ответ #14 : 11 Июля 2002, 17:40:14 »
Пойдёт. :)
Ничего нового я не придумал. :)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28