Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Проблема с кодировкой в cookie / 16 сообщений из 16, страница 1 из 1
17.02.2015, 17:04
    #38882045
zaumanf11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
Привет.

Есть 101 страница авторизации APEX. Там делаются стандартные вещи:
Сначала процесс Before header: где что то вроде этого

DECLARE
c owa_cookie.cookie;
BEGIN
c := owa_cookie.get('LOGIN_USERNAME_COOKIE');
:P101_USERNAME := c.vals(1);
......

А после сабмита что то вроде этого:

BEGIN
OWA_UTIL.MIME_HEADER('text/html', FALSE);

OWA_COOKIE.SEND(
name => 'LOGIN_USERNAME_COOKIE',
value => LOWER(:P101_USERNAME),
expires => SYSDATE + 90
);


Проблема в том что с латиницей все нормально. Куки сохраняются подставляются и все отлично. Но когда я использую в качестве логина русские буквы, например "Вася", то сохраняется в куки вот такое безобразие "????".

Я пробовал подменить P101_USERNAME на
P101_USERNAME_TEST, в котором содержится: encodeURIComponent($('#P101_USERNAME').val());

BEGIN
OWA_UTIL.MIME_HEADER('text/html', FALSE);

OWA_COOKIE.SEND(
name => 'LOGIN_USERNAME_COOKIE',
value => LOWER(:P101_USERNAME_TEST),
expires => SYSDATE + 90
);

Получаю ошибку:
ORA-20987: APEX - An unexpected internal application error has occurred. Please get in contact with your system administrator and provide reference# for further investigation

Быть может я не совсем до конца понимаю работу функции OWA_COOKIE.SEND

Натолкните плиз на правильную дорожку.
...
Рейтинг: 0 / 0
17.02.2015, 17:15
    #38882056
blkangel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
zaumanf11,

я попробовал на Chrome and FireFox, нет проблем с русскими буквами.
И в куках они лежат корректно и считывает он их оттуда правильно.
И процедуры стандартные я не менял
...
Рейтинг: 0 / 0
17.02.2015, 17:21
    #38882062
zaumanf11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
А у Вас версия какая?
У меня Application Express 4.2.4.00.08
Быть может в ней дело.
...
Рейтинг: 0 / 0
17.02.2015, 17:26
    #38882068
blkangel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
zaumanf11,

У меня 4.2.5, мне кажется тут проблема не Апекса. А OS, Браузер.
Проведите эксперимент, попробуйте без апекса записать куки и считать.
...
Рейтинг: 0 / 0
17.02.2015, 17:26
    #38882070
zaumanf11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
У меня они в куках тоже корректно лежат, если я document.cookie = "LOGIN_USERNAME_COOKIE=Вася" сделаю.

А следает все на знаки вопроса после того как вот это выполняется:

OWA_COOKIE.SEND(
name => 'LOGIN_USERNAME_COOKIE',
value => LOWER(:P101_USERNAME),
expires => SYSDATE + 90
);
...
Рейтинг: 0 / 0
17.02.2015, 17:28
    #38882074
blkangel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
zaumanf11У меня они в куках тоже корректно лежат, если я document.cookie = "LOGIN_USERNAME_COOKIE=Вася" сделаю.

А следает все на знаки вопроса после того как вот это выполняется:

OWA_COOKIE.SEND(
name => 'LOGIN_USERNAME_COOKIE',
value => LOWER(:P101_USERNAME),
expires => SYSDATE + 90
);

У меня такая
Код: plsql
1.
2.
3.
4.
5.
6.
7.
begin
owa_util.mime_header('text/html', FALSE);
owa_cookie.send(
    name=>'LOGIN_USERNAME_COOKIE_'||:APP_ID,
    value=>lower(:SP101_USERNAME));
exception when others then null;
end;


Может красного не хватает?
...
Рейтинг: 0 / 0
17.02.2015, 17:36
    #38882082
zaumanf11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
нее.. :( То что красненьким - это есть... Там даже в первом моем посте видно сразу после begin
Один в один как у Вас.


Чудеса какие то.
Вот если сделать так:
document.cookie = "LOGIN_USERNAME_COOKIE=Вася"
То в браузере, там в настройках в хроме можно посмотреть. И он нормально выставляется без проблем в кириллице. Я обновляю страницу, срабатывает процесс который Before header и совершенно нормально подтягивает русское слово из этого кука. Но как только делается
BEGIN
OWA_UTIL.MIME_HEADER('text/html', FALSE);

OWA_COOKIE.SEND(
name => 'LOGIN_USERNAME_COOKIE',
value => LOWER(:P101_USERNAME),
expires => SYSDATE + 90
);

Всё. Одни знаки вопросов записываются в кук.
...
Рейтинг: 0 / 0
17.02.2015, 19:36
    #38882187
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
zaumanf11,

Проверьте, :
1. страницы апекса выводятся в кодировке utf-8
2. Что будет, если вместо :P101_USERNAME подставить русский текст
...
Рейтинг: 0 / 0
18.02.2015, 11:24
    #38882641
zaumanf11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
SvDev,

По второму пункту: Если поставить русский текст вместо :P101_USERNAME, то после сабмита я получаю знаки вопросиков в куке. Количество знаков вопроса равно количеству подставленных русских символов. Соответственно после обновления страницы эти знаки вопросиков подтягиваются в поле из куков. ((
Если подставить латинские символы, вместо :P101_USERNAME, то они нормально сохраняются как надо и подтягиваются в поле - проблем нет.

По первому пункту: К сожалению не знаю как посмотреть в какой кодировке выводятся страницы апекса. Подскажите пожалуйста как посмотреть - я гляну. Но отмечу, что если я в куку явно из консоли браузера указываю:
document.cookie = "LOGIN_USERNAME_COOKIE=Вася"
то "Вася" нормально записывается в куку и даже в поле подтягивается нормально - "Вася", а не знаки вопросов. Т.е. проблема явно происходит в момент owa_cookie.send

Еще я выяснил что селект
select * from nls_database_parameters
выдает:
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA

..поэтому по совету коллег я попробовал сделать перед owa_cookie.send, так:
EXECUTE IMMEDIATE 'alter session set NLS_TERRITORY=''UNITED KINGDOM''';
...и не получил никаких изменений в поведении.
...
Рейтинг: 0 / 0
18.02.2015, 11:36
    #38882657
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
zaumanf11,

Это все не то, нужно посмотреть именно кодировку HTML страницы
...
Рейтинг: 0 / 0
18.02.2015, 11:47
    #38882671
zaumanf11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
Возможно речь идет о том что установлено между тегами head в htmlкоде страницы?
там есть такая строка
<meta charset="utf-8">
...
Рейтинг: 0 / 0
18.02.2015, 11:55
    #38882686
zaumanf11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...
Рейтинг: 0 / 0
18.02.2015, 11:56
    #38882687
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
zaumanf11,

Например, в Firefox, отобразить панель меню, вид > кодировка поменять с автоопределения на utf-8, если отобразилось норм, значит utf8

И ещё покажите select * from v$version
...
Рейтинг: 0 / 0
18.02.2015, 12:09
    #38882709
zaumanf11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
Выставил в браузере UTF-8
Ничего не изменилось, знаки вопросов ((

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
...
Рейтинг: 0 / 0
18.02.2015, 12:40
    #38882755
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
zaumanf11,

Нужно было только посмотреть кодировку, ну ок.
проблема судя по всему здесь:

http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/w_cook.htm#ARPLS70666 Using OWA_COOKIE

Rules and Limits

All HTTP headers must be in English and the ASCII character set. If the headers are generated from the database, verify they are created in the English language.

Попробуйте применить utl_url.escape к LOWER(:P101_USERNAME) перед передачей в куку.

Если кодировка базы не UTF-8, 3-тий параметр url_charset установите в UTF-8
Код: sql
1.
2.
select value from nls_database_parameters t
where t.PARAMETER = 'NLS_CHARACTERSET'
...
Рейтинг: 0 / 0
18.02.2015, 13:15
    #38882807
zaumanf11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в cookie
SvDev, спасибо огромное!!!
Теперь работает!
При помощи этой функции сохраняет васю в виде "%D0%B2%D0%B0%D1%81%D1%8F" и в before header я когда читаю куку, обратно функцией unescape русские буквы возвращаю.
Большое при большое спасибо!
blkangel, Вам тоже спасибо что откликнулись!
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Проблема с кодировкой в cookie / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]