Presumiblemente hay un pequeño golpe de rendimiento, ¿pero más allá de eso?¿Hay algún problema al ejecutar session_start() varias veces a medida que se genera la solicitud de página (en php)?
Respuesta
De the docs:
A partir de PHP 4.3.3, llamando session_start() después de que la sesión se haya iniciado anteriormente dará como resultado un error del nivel E_NOTICE. Además, el inicio de la segunda sesión simplemente se ignorará.
Así que no, no "causará daño", pero arrojará un error. Y el hecho de que esté sucediendo es probablemente un indicador de que estás haciendo algo incorrectamente y tal vez necesites volver a pensar cómo se presenta tu código.
A partir de PHP 4.3.3, la llamada a session_start() mientras la sesión ya se ha iniciado dará como resultado una advertencia E_NOTICE. La segunda llamada a session_start() será simplemente ignored.You podría comprobar si la sesión se ha iniciado o no con la primera:
if (session_id() == "")
session_start();
lectura de la documentación para session_start, todo lo que puedo ver es:
A partir de PHP 4.3.3, llamando
session_start()
después de la sesión se inició con anterioridad dará lugar a un error de nivelE_NOTICE
. Además, el inicio de la segunda sesión simplemente se ignorará.
Por lo tanto, obtendrá un E_NOTICE
y será ignorado.
Si la sesión ya está abierta, se devolverá un aviso de error y se ignorará la nueva sesión. Así que no se hace daño, pero tendrás un error molesto.
Pero ... si encuentra la necesidad de hacerlo, podría ser un síntoma de que su código no está bien organizado. Probablemente sea en su beneficio ver cómo puede evitar repetir tareas redundantes, como comenzar una sesión.
Normalmente coloco una instrucción de inicio de sesión en un archivo de inclusión que requiero_un inicio. Pero no creo que haya un problema con múltiples llamadas.
Llamando session_start(); puede dañar el rendimiento de su aplicación.
El siguiente código desencadenar un E_NOTICE, pero no dañará mucho a rendimiento
<?php
session_start();
session_start();
?>
Pero llamar a la siguiente perjudicará el rendimiento! Pero sigue siendo útil. Si tiene un script que tarda como 3 minutos en ejecutarse, se lo llama con XHR (js). En este caso, es útil usar session_write_close. de lo contrario, la solicitud al servidor se bloquea hasta que se liberen las sesiones. Podría suceder que desee utilizar las sesiones al inicio del guión y al final del guión.
<?php
session_start();
session_write_close();
session_start();
?>
Pero cuando llama al session_start(); toda la información se deserializa, y cuando se llama a session_write_closed() se serializa. ¡Entonces, si tiene muchos datos, puede ser realmente lento!
La siguiente prueba muestra cuánto impacto tiene.
1,0130980014801 sesion_start + cercano con sesión vacía
1,0028710365295 bucle normal sin sesión
12,808688879013 unos datos del lote en la sesión con arranque + cerca
1,0081849098206 bucle normal de nuevo (inútil un poco)
<?php
//start and clear first session
session_start();
session_destroy();
session_write_close();
//test one
if(true) {
//test loop one
$start = microtime(true);
for($i = 0; $i < 1000; $i++) {
session_start();
usleep(100);
session_write_close();
}
$end = microtime(true);
echo($end - $start);
//test loop 2
echo('<br />');
$start = microtime(true);
for($i = 0; $i < 1000; $i++) {
usleep(100);
}
$end = microtime(true);
echo($end - $start);
}
//fill the array with information so serialization is needed
session_start();
$_SESSION['test'] = array();
for($i = 0; $i < 10000; $i++) {
$_SESSION['test'][$i] = chr($i);
}
session_write_close();
echo('<br />');
//test two
if(true) {
//test loop one
$start = microtime(true);
for($i = 0; $i < 1000; $i++) {
session_start();
usleep(100);
session_write_close();
}
$end = microtime(true);
echo($end - $start);
//test loop 2
echo('<br />');
$start = microtime(true);
for($i = 0; $i < 1000; $i++) {
usleep(100);
}
$end = microtime(true);
echo($end - $start);
}
?>
Si produce un error, es probable que los desarrolladores no tengan la intención de realizar esa acción en particular t o ocurrir. Así que, sí, a pesar de lo que te muestra W3Schools, técnicamente es una "mala" cosa que hacer.
Entonces, en lugar de ir a lo seguro y tratar de configurar la sesión en cada página, ¿por qué no primero verifique si la sesión existe antes de seguir adelante?
if (!isset($_SESSION)) session_start();
Personalmente, comprueba primero la existencia de la cookie de la sesión.
`siempre use esto para la inclusión del archivo de encabezado y pie de página en php. inicia sesión en ambas páginas pero usa esto then session_start()
if (! isset ($ _ SESSION)) {session_start(); } `
- 1. ejecutar SwingWorker varias veces
- 2. PHP proc_open abre varias veces
- 3. ¿Cómo se bloquea session_start en PHP?
- 4. Chrome envía una solicitud varias veces
- 5. PHP session_start()
- 6. PHP session_start falla
- 7. La aplicación ASP.NET MVC dispara Session_Start varias veces para una sola sesión
- 8. Reutilizando la misma página varias veces
- 9. PHP session_start está colgando
- 10. ¿Es normal que se llame varias veces al método "activity.onCreate()"
- 11. Problema de Chrome: las líneas de chat devuelven varias veces
- 12. session_start se cuelga
- 13. session_start parece ser muy lento (pero solo algunas veces)
- 14. Archivo de servicio de Apache/PHP varias veces
- 15. EKEventStoreChangedNotification se llama varias veces
- 16. ¿Hay algún problema con ejecutar PHP y Ruby en el mismo servidor Apache?
- 17. ¿Hay algún punto para minificar a PHP?
- 18. NSNotification se plantea varias veces
- 19. ¿Hay algún problema al colocar los métodos de prueba en la misma clase que está probando?
- 20. ¿Hay algún problema con Log4Net?
- 21. Reutilizar una variable varias veces en una página de ASP.NET
- 22. ¿Hay algún problema con CGColorGetComponents?
- 23. ¿Hay algún daño al ejecutar PHP y Ruby en el mismo servidor?
- 24. ¿Qué causa realmente que se llame a Session_Start?
- 25. ¿Hay algún encabezado httpresponse que redirija al usuario a alguna página de mi sitio?
- 26. MYSQL unirse a las tablas varias veces
- 27. Problema al ejecutar instrumentos en el iPad
- 28. Cómo ejecutar una función de Powershell varias veces en paralelo
- 29. WPF - Diseño Evento actualizado que se repite varias veces
- 30. ¿Hay algún compilador/intérprete para ejecutar código para php 5.3?