php / php/php-src

Using `SessionHandler` doesn't always close session file

Abierto
#16,027 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Bug Extension: session Status: Verified
Lenguaje dominante
C
Estrellas
40.4k
Forks
8.2k
Merge medio
2 d 13 h
PR fusionados (30 d)
96

Descripción

Description

The following code:

<?php

session_set_save_handler(new \SessionHandler, true);

session_start([
    'save_path' => __DIR__,
]);

$_SESSION['test'] = function () {};

If you make a request to this you'll see a fatal error due to the serialization failing, if you try and make another request the file is still locked and the request hangs waiting for the lock to be released. Removing the session_set_save_handler() is sufficient to fix the problem. From what I can tell ps_close_user is called but it never appears to make the call to SessionHandler::close().

I've managed to replicate this behaviour on FPM (ZTS and NTS) and CLI server.

I've written a test: 88f32f48e2b6e7fd3554aef8d255f88d02a4e8db

PHP Version

8.3.11 and 8.3.13-dev

Operating System

Debian/Ubuntu

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con la reproducción y la prueba en el commit 88f32f48e2b6e7fd3554aef8d255f88d02a4e8db y, a continuación, sigue ps_close_user y el callback SessionHandler::close() en la implementación de la sesión. Ejecuta el caso con FPM o el CLI server. Se considera terminado cuando la solicitud de serialización fallida ya no deja bloqueado el archivo de sesión y la prueba de regresión pasa.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
c, php
Área
backend
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.