usuarios usando start sesiones pasar paginas manejo entre ejemplo control autenticación php ajax session

usando - session start php



¿Las solicitudes AJAX retienen la información de la sesión PHP? (7)

Si tuviera un usuario conectado a mi sitio, con su ID almacenado en $_SESSION , y desde su navegador, hizo clic en el botón "Guardar" que haría una solicitud de AJAX al servidor. ¿Se $_SESSION sus $_SESSION y cookies en esta solicitud, y puedo confiar con seguridad en que el ID esté presente en $_SESSION ?


Es muy importante que las solicitudes de AJAX retengan la sesión. El ejemplo más fácil es cuando intenta hacer una solicitud de AJAX para el panel de administración, digamos. Por supuesto que protegerá la página a la que hace la solicitud, no a la que puedan acceder otras personas que no tengan la sesión que obtiene después de iniciar sesión en el administrador. ¿Tiene sentido?


Eso es lo que hacen los marcos, por ejemplo, si inicializas sesión en Front Controller o boostrap script, no tendrás que preocuparte por su inicialización ni para los controladores de página ni para los controladores ajax. Los marcos de PHP no son una panacea, ¡pero hacen tantas cosas útiles como esta!


La respuesta es sí:

Las sesiones se mantienen en el lado del servidor. En lo que respecta al servidor, no hay diferencia entre una solicitud AJAX y una solicitud de página normal. Ambas son solicitudes HTTP, y ambas contienen información de cookies en el encabezado de la misma manera.

Desde el lado del cliente, las mismas cookies siempre se enviarán al servidor, ya sea una solicitud regular o una solicitud de AJAX. El código Javascript no necesita hacer nada especial o incluso estar al tanto de esto, simplemente funciona igual que con las solicitudes regulares.


Lo que realmente está entendiendo es: ¿se envían las cookies con la solicitud de AJAX? Suponiendo que la solicitud AJAX es para el mismo dominio (o dentro de las restricciones de dominio de la cookie), la respuesta es sí. Por lo tanto, las solicitudes AJAX de regreso al mismo servidor retienen la misma información de sesión (suponiendo que las secuencias de comandos llamadas emitan una session_start () como cualquier otra secuencia de comandos PHP que desee acceder a la información de la sesión).


Si el archivo PHP que AJAX solicita tiene un session_start() la información de la sesión. (excluyendo las solicitudes están dentro del mismo dominio)


Sin embargo, una cosa a tener en cuenta, especialmente si está utilizando un marco, es comprobar si la aplicación está regenerando identificadores de sesión entre solicitudes: todo lo que dependa explícitamente de la identificación de la sesión se encontrará con problemas, aunque obviamente el resto de los datos la sesión no se verá afectada.

Si la aplicación está regenerando identificadores de sesión como este, puede terminar con una situación en la que una solicitud ajax en efecto invalida / reemplaza la identificación de la sesión en la página solicitante.


Bueno, no siempre Usando cookies, eres bueno. Pero el "¿puedo confiar con seguridad en que el ID esté presente?" Me instó a ampliar la discusión con un punto importante (principalmente como referencia, ya que el conteo de visitantes de esta página parece bastante alto).

PHP se puede configurar para mantener las sesiones por reescritura de URL, en lugar de cookies. ( Cómo es bueno o malo (<- ver, por ejemplo, el comentario más alla) es una pregunta aparte , ahora vamos a seguir con la actual, con solo una nota al margen: el problema más destacado con sesiones basadas en URL: el flagrante visibilidad de la ID de sesión desnuda - no es un problema con las llamadas internas de Ajax, pero luego, si está activada para Ajax, también está activada para el resto del sitio, por lo que hay ...)

En el caso de las sesiones de reescritura de URL (sin cookies), las llamadas Ajax deben encargarse de que sus URL de solicitud estén correctamente diseñadas. (O puede lanzar su propia solución personalizada. Incluso puede recurrir a mantener sesiones en el lado del cliente , en casos menos exigentes). El punto es la atención explícita necesaria para la continuidad de la sesión, si no se utilizan cookies:

  1. Si las llamadas Ajax solo extraen literalmente las URL del HTML (tal como se recibe de PHP), eso debería estar bien, ya que están cocidas (umm, cocidas).

  2. Si necesitan ensamblar los URI de solicitud, la ID de la sesión debe agregarse a la URL manualmente. (Marque here o las fuentes de página generadas por PHP ( con reescritura de URL activada ) para ver cómo hacerlo).

De OWASP.org :

Efectivamente, la aplicación web puede usar ambos mecanismos, cookies o parámetros de URL, o incluso cambiar de uno a otro (reescritura automática de URL) si se cumplen ciertas condiciones (por ejemplo, la existencia de clientes web sin soporte de cookies o cuando las cookies no son compatibles). aceptado debido a preocupaciones de privacidad del usuario).

Desde una publicación de Ruby-forum :

Al usar php con cookies, la ID de la sesión se enviará automáticamente en los encabezados de solicitud incluso para Ajax XMLHttpRequests. Si usa o permite sesiones de php basadas en URL, tendrá que agregar el id de la sesión a cada URL de solicitud de Ajax.