start phpsessid imprimir ejemplo php websocket session-variables session-cookies sessionid

phpsessid - ¿Cómo puedo obtener datos de $_SESSION de SESSID?



session start id (1)

Parece que lo he resuelto (pero tengo que probarlo más):

private function handshake($data) { $this->log(''Performing handshake''); if(preg_match("/PHPSESSID=(.*?)(?:;|/r/n)/", $data, $matches)){ $this->sessID = $matches[1]; session_id($this->sessID); @session_start(); if(isset($_SESSION[''userName''])){ $this->userName = $_SESSION[''userName'']; }else{ $_SESSION[''userName''] = $this->userName; } session_write_close(); }else{ $this->log(''No SESSID''); return false; } /* Do handshake */ }

Y para habilitar las cookies de sesión, en mi página de cliente index.php

<?php session_start(); ?> <!DOCTYPE html> <!-- Page''s HTML -->

Explicación

Primero, uso session_id para que la siguiente session_start() me proporcione la sesión relacionada con el SESSID dado.

Entonces, puedo usar @session_start() para comenzar la sesión. Necesita @ porque el servidor websocket ya ha comenzado, por lo que no usarlo produce:

  • Advertencia de PHP: session_start (): No se puede enviar la cookie de sesión - los encabezados ya enviados
  • Advertencia de PHP: session_start (): no se puede enviar el limitador de caché de sesión - los encabezados ya enviados

Ahora puedo hacer lo que quiero con $_SESSION .

Finalmente, uso session_write_close() para cerrar la sesión. Debe ser usado porque:

  • session_id debe session_id antes de session_start() . Si la sesión no se cierra, cuando un segundo cliente se conecta, ya habrá una sesión abierta, por lo que session_id no funcionará.

  • Para evitar el bloqueo de la sesión. Como dijo @Sven, solo puede haber una instancia de PHP ejecutándose que tenga acceso al archivo de sesión . Como la secuencia de comandos del servidor websocket debe ejecutarse durante un tiempo prolongado, una vez que abre una sesión, no puede usar la sesión en otras secuencias de comandos si no la cierra.

Tengo un servidor websocket PHP ( https://github.com/lemmingzshadow/php-websocket/ ).

Cuando un usuario se conecta, quiero establecer / obtener algunos datos de sesión.

El problema es que no puedo usar $_SESSION porque si lo hago, en lugar de la sesión de los clientes obtengo la sesión de mi servidor websocket.

Logré obtener el SESSID de los clientes:

private function handshake($data) { $this->log(''Performing handshake''); if(preg_match("/PHPSESSID=(.*?)(?:;|/r/n)/", $data, $matches)){ $sessid = $matches[1]; } /* Do handshake */ }

Pero ahora no sé cómo obtener los datos de la sesión relacionados con ese SESSID.