Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

602
Views
Oracle Apex obtiene una cookie de una solicitud ajax

¿Cómo puedo obtener el valor de una cookie en Oracle a partir de una solicitud que se originó con ajax desde una página no apex (dentro de un servidor apex)?

Quería comenzar creando una función que devuelva el valor de la cookie de inicio de sesión y usar esa función para devolver el valor al navegador para ver si se puede hacer.

Así que creé una plantilla de recursos y un controlador con la siguiente fuente: select test() from dual . La función test se declara como:

 create or replace function test return varchar2 is c owa_cookie.cookie; begin c := owa_cookie.get('LOGIN_USERNAME_COOKIE'); return c.vals(1); end;

Cuando ejecuto select test() from dual desde una ventana de comandos sql, obtengo el valor de la cookie, pero cuando envío una solicitud al controlador con ajax, aparece el siguiente error:

 An error occurred when evaluating the SQL statement associated with this resource. SQL Error Code 6502, Error Message: ORA-06502: PL/SQL: numeric or value error ORA-06512: at "SYS.OWA_UTIL", line 354 ORA-06512: at "SYS.OWA_COOKIE", line 59 ORA-06512: at "SYS.OWA_COOKIE", line 179 ORA-06512: at "<no need to see this>.TEST", line 5

He estado usando la siguiente llamada (comprobando el resultado a través de las herramientas de desarrollo de la red) $.ajax({url: "<handler url here>"})

Actualización: la razón por la que estoy usando un servicio de descanso es porque la página que origina la solicitud no es una aplicación de vértice pero está en el mismo dominio (por lo que tiene las mismas cookies).

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Esto es lo que creo que está sucediendo: la cookie se envía como parte del encabezado de solicitud http de la llamada de su aplicación Apex. La llamada restante es otra solicitud http, no relacionada con su solicitud apex http y no creo que el encabezado de esa solicitud incluya la cookie. Entonces, en la sesión de la base de datos que se crea como parte de su solicitud de descanso, la cookie no existirá. Probablemente podría configurar el encabezado de la solicitud de resto para solucionar esto.

--ACTUALIZAR-- Para verificar qué cookies se pueden leer, cree un controlador de reposo de tipo fuente pl/sql con la siguiente fuente:

 DECLARE l_names owa_cookie.vc_arr; l_vals owa_cookie.vc_arr; l_num_vals INTEGER; BEGIN owa_cookie.get_all( names => l_names, vals => l_vals, num_vals => l_num_vals); APEX_JSON.open_array('cookies'); FOR r IN 1 .. l_names.COUNT LOOP APEX_JSON.open_object; -- { APEX_JSON.write('name', l_names(r)); APEX_JSON.write('value', l_vals(r)); APEX_JSON.close_object; -- } cookie END LOOP; APEX_JSON.close_array; -- ] cookies END;

La cookie de nombre de usuario de Apex no está en esa lista de cookies. Le sugiero que cree su propia cookie personalizada en un proceso posterior al inicio de sesión en Apex. Verifiqué que el controlador de resto selecciona una cookie configurada con el siguiente código en un proceso de Apex (basado en el blog https://www.apex-at-work.com/2012/05/apex-simple-cookie-example .html )

 begin owa_util.mime_header('text/html', FALSE); owa_cookie.send( name => 'CUSTOM_USER_COOKIE', value => :APP_USER, expires => sysdate + 30 ); apex_util.redirect_url ( p_url => 'f?p=&APP_ID.:1:' || :SESSION, p_reset_htp_buffer => false ); end;
over 4 years ago · Santiago Trujillo Report

0

Para obtener una cookie de una solicitud AJAX dentro de APEX, puede usar el paquete OWA_COOKIE , pero no necesita definir plantillas ni controladores. Todo se puede hacer desde dentro de la página (o llamando a un procedimiento externo desde dentro de la página). A continuación se muestran los pasos que utilicé para obtener la cookie JSESSIONID.

He creado unaaplicación de ejemplo en apex.oracle.com que puede consultar.

Configuración de página

La página es muy simple con solo un cuadro de texto y un botón. La acción del botón está configurada para Redirigir a URL y este es el objetivo:

 javascript: apex.server.process("AJAX_TEST", { }, { success: function (pData) { console.log(pData); apex.item("P10_JSESSIONID").setValue(pData); }, dataType: "text", error: function (jqXHR, textStatus, errorThrown) { } }).always(function () { });

El javascript llama a la devolución de llamada de AJAX (que se muestra a continuación) y almacena el resultado en el elemento de la página P10_JSESSIONID, además de registrarlo en la consola del navegador.

Configuración de página

Configuración de devolución de llamada AJAX

El código en la devolución de llamada de AJAX es muy similar al código que compartió. Recibo la cookie y luego la imprimo con HTP.P. Esto es todo lo que se necesita para devolver el valor de la cookie a la página para que se use para lo que quieras. También puede hacer que el código de la devolución de llamada de AJAX sea un procedimiento independiente compilado en la base de datos si así lo desea.

Configuración de devolución de llamada Ajax

Actualizar

Actualicé mi aplicación de ejemplo para que haya un menú desplegable que muestre todas las cookies, luego puede seleccionar de la lista y hacer clic en el botón para enviar una solicitud AJAX para obtener el valor de esa cookie.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!