variable validar por pasar formularios formulario enviar ejemplos php ajax session session-cookies

validar - pasar variable de javascript a php por post



¿Por qué cambia la identificación de la sesión cuando se solicita a través de ajax en php? (5)

Estoy conectado en Banana.com . Banana tiene un enlace de API en /app/ajax_loggedin .

Mi sitio web es mono. Monkey ejecuta un simple GET json para banana /app/ajax_loggedin , que devuelve un valor de inicio de sesión 1 o 0.

¿Por qué siempre devuelve 0 cuando está a través de ajax, a pesar de que realmente estoy conectado a Banana y también al acceder directamente al enlace? 1. ¿Cómo puede el desarrollador de Banana solucionarlo?

Lo hubiera entendido si es una llamada del servidor, pero no entiendo por qué no me dice si estoy conectado, si Banana hace la solicitud. Al ejecutar la verificación session_id() , genera una nueva para cada llamada a través de ajax y, al acceder directamente, funciona bien y sigue igual.

¿Hay alguna solución u otra forma de hacer esto?


Algo en el código de origen y / o en el código ajax está configurando el controlador de guardado de sesión. Entonces, por ejemplo, su origen puede guardar las sesiones en la base de datos, mientras que el script ajax está guardando las sesiones en un archivo.

Aquí está el manual de php: http://php.net/manual/en/class.sessionhandler.php


Cada punto de entrada o llamada al servidor (API) debe tener session_start() al principio. Si no se lee en el identificador de sesión, actuará como si no hubiera uno y luego devolverá un nuevo identificador de sesión. Cuando su navegador obtenga la respuesta, sobrescribirá el identificador de sesión con el nuevo. Asegúrese de tener session_start() en la parte superior de todos los lugares donde realiza una llamada al servidor para que sepa qué sesión usar.


En lugar de llamar a la API y comprobar si la sesión está activa. La identificación de la sesión se almacena en la cookie si se especifica dónde almacenar la identificación de la sesión en el archivo de configuración, o puede verificar si la identificación de la sesión se establece con el siguiente código después de

session_start(); $session_id=session_id(); if(isset($_SESSION[$session_id]))


En realidad no hay suficiente información para responder definitivamente esta pregunta. Sin embargo, esto es lo que podemos decir en base a esta información.

Si está utilizando el controlador de sesión PHP estándar, la cookie de sesión tendrá un dominio asociado (que, si no está configurado en php.ini o en su código, probablemente sea el dominio desde el que se llamó la secuencia de comandos). Por ejemplo, si llama a un script que invoca session_start() desde el dominio www..com y otro script en chat..com inicia una sesión, no tendrá acceso a la cookie con el dominio www..com Y así comenzará una nueva sesión.

Los dominios en el encabezado de la cookie pueden aumentar, pero no hacia abajo. Entonces, si desea que la cookie de su sesión tenga acceso a todos los subdominios de Banana.com , debe asegurarse de establecer el parámetro de dominio correctamente en cada solicitud de inicialización de sesión con ese dominio.

Ver session_set_cookie_params y session_get_cookie_params para más detalles ...

El dominio al que está disponible la cookie. Establecer el dominio en ''www.example.com'' hará que la cookie esté disponible en el subdominio www y en los subdominios superiores. Las cookies disponibles para un dominio inferior, como ''example.com'', estarán disponibles para subdominios superiores, como ''www.example.com''. Los navegadores más antiguos que aún implementan el »RFC 2109 en desuso pueden requerir un líder. para que coincida con todos los subdominios.

Además, debe tener en cuenta que las cookies enviadas con el parámetro seguro o http_only establecido en verdadero no se podrán leer en conexiones inseguras o iniciadas por JavaScript, como en el caso de Ajax .


Las razones por las que obtendría un nuevo ID de sesión son

  • Usted borró la cookie de ID de sesión (típicamente llamada PHPSESSID )
  • Visitó una página que llamó session_regenerate_id() (poco probable)
  • Su sesión alcanzó la vida máxima y se recolectó la basura . Esta es una posibilidad distinta si banana.com tiene muchos visitantes, porque la basura se recolecta al azar cuando se invoca PHP
  • session_id() fue invocado con una sesión diferente

¿Entonces lo que hay que hacer?

  • Echa un vistazo a los archivos de sesión en el servidor. Son textos simples para que puedas abrirlos y ver qué hay dentro. Asegúrese de que su sesión existe.
  • Compruebe php.ini para una corta duración de la sesión.
  • Cargar sesiones en otra cosa y ver si continúa. El uso de un sistema MySQL / memcached con un controlador de sesión personalizado podría revelar problemas.