Red de conocimiento informático - Aprendizaje de programación - Problema de error de sesión de PHP

Problema de error de sesión de PHP

Colección de preguntas de sesión Para la función de sesión de PHP, nunca he podido encontrar una respuesta adecuada, especialmente algunos errores y algunos resultados sin errores. Lo más aterrador es lo último, que siempre ha sido así. Un problema para muchos principiantes. Incluso algunos veteranos a veces se sienten confundidos. Este artículo hace un resumen simple de estos temas para referencia de todos. 1.

Mensaje de error

Advertencia: No se pueden enviar cookies de sesión - encabezados ya enviados

Advertencia: No se puede enviar el limitador de caché de sesión - encabezados ya enviados

Análisis y soluciones

La razón de este tipo de problema es que cuando usas session_start() en el programa, el contenido html real ya se ha generado antes. Tal vez digas, no lo tengo, solo hago eco o imprimo un mensaje. Lo sentimos, el resultado generado por su declaración de eco o impresión es el resultado del contenido html real. La forma de resolver este tipo de problema es mover session_start() a la primera línea del programa. 2.

Mensaje de error

Advertencia: open(F:/689phpsessiondatasess_66a39376b873f4daecf239891edc98b5, O_RDWR) falló

Análisis y solución

Esto aparece La declaración de error generalmente se debe a que el elemento session.save_path en su php.ini no está configurado correctamente. La solución es establecer las configuraciones session.save_path y session.cookie_path en

session_save_path = c: emp < /p. >

session.cookie_path = c: emp

Luego cree un directorio temporal en el directorio c:, 3.

Mensaje de error

Advertencia: intentándolo para destruir la sesión no inicializada en

Análisis y soluciones

Dichas indicaciones generalmente son causadas por usted llamando directamente a la función session_destroy(). Muchos amigos piensan que la función session_destroy() se puede ejecutar de forma independiente, pero ese no es el caso. La solución es usar session_start() para habilitar la función de sesión antes de llamar a la función session_destroy(). 4. Pregunta: ¿Cómo obtener el valor de ID de la sesión actual?

La forma más sencilla es:

echo SID

Lo descubrirás. 5. Pregunta: Mi programa no tiene ningún resultado antes de llamar a la función de encabezado. Aunque incluyo un archivo config.php, no hay ningún resultado en el archivo config.php. ¿Por qué la sesión sigue informando el mismo problema que en la Pregunta 1? Tengo el mismo error. ¿Es porque usé session_start() antes del encabezado?

Respuesta: Tal vez hayas revisado cuidadosamente tu programa php y no lo usaste antes de hacer referencia al encabezado(). ¡Y no hay resultados en su archivo de inclusión! ¿Pero utiliza las teclas del cursor para mover la verificación después de la declaración final del código PHP?>? Luego encontrará que después de ?>, hay una línea en blanco o algunos espacios. Si elimina estas líneas o espacios en blanco, el problema se resolverá.

Nota: Este problema ocurrirá en PHP4.1.2 y versiones superiores y no ha sido probado.

6. Pregunta: Después de usar la sesión para iniciar sesión en la página principal, ¿cómo puedo usar la sesión para restringir el inicio de sesión en otras páginas? . .

Respuesta: El método más simple es

session_start();

if(!session_registered('login') ││ $login != true) {

echo "No has iniciado sesión";

exit;

} 7. Pregunta: Utilicé session_register() para registrar la variable de sesión, pero cuando use el encabezado O use la declaración de redirección de javascript, luego, en la siguiente página, no puedo acceder al valor de la variable registrada por la sesión. ¿Cómo solucionarlo?

Fragmento de programa del problema:

session_start();

$ok = 'te amo'; ' );

encabezado("ubicación: next.php"); > next.php

session_start();

echo $ok;

Cuando utiliza funciones como la función de encabezado o window.location, la variable de sesión registrada en su página anterior se perderá fácilmente. Todavía no hay una explicación detallada de la causa de este problema.

Pero hay una solución. Como se muestra a continuación

header("Ubicación: next.php" ."?" . SID

Al saltar a la página siguiente, cambie el ID actual de la sesión. un parámetro, pasado a la página siguiente. 8. Cómo pasar una matriz en la sesión

session_register('data');

$data=array(1,2,3,4); luego asigne el valor 9. Pregunta 9: ¿Puedo usar un método como $HTTP_GET_VARS['**'] para acceder al valor de la sesión? Respuesta: Sí, puede utilizar la siguiente matriz global para acceder a la sesión y mejorar la seguridad de la página web

$HTTP_SESSION_VARS

$_SESSION

Rutina:

p>

session_start();

$nombre de usuario = 'stangly.wrong';

session_register('nombre de usuario'); 'nombre de usuario'];

p>

echo '

';

echo $_SESSION['nombre de usuario'] >

Consulte esta rutina para modificarla y adaptarla a su propio programa. Pregunta 10: ¿Cuál es la diferencia entre session_unregister() y session_destroy()?

La función principal de la función session_unregister() es cancelar la sesión actual. (Traducido de php.net) Rutina:

if(isset($_COOKIE[session_name()] )) {

session_start();

session_destroy();

unset($_COOKIE[session_name()]); }

Los anteriores son algunos de los problemas que los principiantes suelen encontrar. Tal vez los detalles no estén claros y es probable que haya errores. Brinde orientación y críticas de los expertos.

Configuración de sesión en php Hoy, el depurador encontró un problema con la configuración de la sesión. Este artículo en Internet es mejor *** Úselo para aprender y como referencia.

Reimpreso del foro de viajes con --enable-trans-sid

session.use_trans_sid = 1 url_rewriter.tags = "a=href,area=href,frame=src, input=src,formulario=entrada falsa" ============================================ == ============================

¿Cuál es el ciclo de vida de una sesión 1 Su ciclo de vida? finaliza cuando finaliza el navegador. También finaliza al mismo tiempo, pero el archivo aún existe en /tmp/(sess_)

2 El ID de sesión se reasignará la próxima vez que vuelva a abrir el navegador si usa session_id. () para recuperar el ID anterior,

2 p>

Leerá el sess_ restante en /tmp y recuperará todos los parámetros que haya configurado antes

3 Puede modifique el tiempo restante de sesión del archivo de sesión en php.ini. gc_maxlifetime = 1440; después de este número de segundos, los datos almacenados

se verán como 'basura' y

; limpiado por el proceso gc El valor predeterminado es 1440 segundos, 24 minutos

============================== ================= ==============================Método de uso ilimitado Sesión de por vida

Agregado en PHP4.0 ¡El soporte para sesión facilita muchos de nuestros programas, como carritos de compras y más!

En muchos foros, la sesión también se utiliza para procesar los inicios de sesión de los usuarios y registrar nombres de usuarios y contraseñas, de modo que los usuarios no tengan que ingresar sus nombres de usuario y contraseñas cada vez. Sin embargo, la vida útil de una sesión general es limitada. Si el usuario cierra el navegador, las variables de la sesión no se pueden guardar. Entonces, ¿cómo podemos lograr la vida útil permanente de Session?

Como todos sabemos, la sesión se almacena en el lado del servidor. El archivo del usuario se obtiene en función del ID de sesión proporcionado por el cliente y luego se lee el archivo para obtener el valor de la variable. SessionID puede utilizar la cookie del cliente o el protocolo Http1.1 (la parte después del "?" de la URL a la que se accede) se envía al servidor, y luego el servidor lee el directorio de la sesión...

Para realizar la vida permanente de la sesión, primero debe comprender la configuración de php.ini relacionada con la sesión (abra el archivo php.ini, en la sección "[Sesión]"):

1 . session.use_cookies: el valor predeterminado es "1", lo que significa que la cookie pasa el SessionID. De lo contrario, use Query_String para pasar

2. session.name: este es el nombre de la variable almacenada en; SessionID Puede ser una cookie o Query_String para pasar. El valor predeterminado es "PHPSESSID";

3. session.cookie_lifetime: esto representa el tiempo que el SessionID se almacena en la cookie del cliente. , lo que significa que el ID de sesión se invalidará tan pronto como el navegador lo cierre... ¡Es por esto que la sesión no se puede usar permanentemente!

4. session.gc_maxlifetime: este es el momento en que los datos de la sesión se almacenan en el lado del servidor.

tiempo, si se excede este tiempo, los datos de la sesión se eliminarán automáticamente.

Hay muchas configuraciones, pero estas son las relacionadas con este artículo. Comencemos con los principios y pasos para usar la sesión permanente.

Como se mencionó anteriormente, el servidor lee los datos de la sesión a través de SessionID, pero generalmente el SessionID enviado por el navegador desaparece después de cerrarlo, por lo que solo necesitamos configurar manualmente el SessionID y guardarlo, no. Eso es it...

Si tienes los permisos operativos del servidor, configurar esto es muy, muy simple. Solo necesitas realizar los siguientes pasos:

1. Configura ". session.use_cookies" Si es 1, abra la cookie para almacenar el SessionID, pero el valor predeterminado es 1 y generalmente no es necesario modificarlo;

2. Cambie "session.cookie_lifetime" a infinito positivo (Por supuesto, no hay ningún parámetro para el infinito positivo, pero ni 999999999 ni el infinito positivo. ¿Cuál es la diferencia?

3. Establezca "session.gc_maxlifetime" al mismo tiempo que "session.cookie_lifetime"; /p>

Después de la configuración, abra el editor e ingrese el siguiente código:

------------------------- ----------------------- --------------------------- ---------------

session_register('cuenta');

echo $cuenta; >

-------- --------------------------- ----------------------- --------------------------

Luego guárdelo como "session_check.php" y abra "session_check.php" con un navegador ", vea si se muestra "1", cierre el navegador y luego ábralo para acceder a "session_check.php ". Si se muestra "2", felicidades, lo ha logrado; si falla, verifique su configuración anterior.

Pero si no tiene la autoridad operativa del servidor, será más problemático. Deberá reescribir el SessionID a través del programa PHP para lograr un almacenamiento permanente de los datos de la sesión.

Consulte el manual de funciones de php.net y podrá ver la función "session_id": si no se establecen parámetros, se devolverá el ID de sesión actual. Si se configuran los parámetros, el ID de sesión actual se establecerá en el valor dado...

Siempre que utilice una cookie permanente y agregue la función "session_id", ¡puede guardar datos de sesión permanentes!

Pero por conveniencia, necesitamos conocer el "nombre de sesión" de la configuración del servidor, pero la mayoría de los usuarios no tienen permiso para ver la configuración php.ini del servidor, pero PHP proporciona una muy buena función " phpinfo". ¡Utilice esto para ver casi toda la información de PHP!

------------------------------------------- ------------------------------------------------

-- ------------------------------------------ -------- --------------------------------

Abre el editor , ingrese el código anterior y luego Cuando ejecute este programa en el navegador, verá información relacionada con PHP (como se muestra en la Figura 1). Hay un parámetro "session.name" (ya marcado en la figura). Este es el servidor "session.name" que necesitamos, generalmente "PHPSESSID".

Después de escribir el nombre de SessionID, ¡podemos lograr un almacenamiento permanente de los datos de la sesión!

Abre el editor e introduce el siguiente código:

-------------------------- - -------------------------------------------------- ------

session_start(); // Iniciar sesión

session_register('count'); // Registrar sesión variable Count

if ( isset($PHPSESSID)) {

session_id($PHPSESSID);

} // Si se establece $PHPSESSID, asigne SessionID a $PHPSESSID; de lo contrario, genere SessionID

$PHPSESSID = session_id(); // Obtener el ID de sesión actual

$count++; // Aumentar el recuento de variables en 1

setcookie('PHPSESSID', $PHPSESSID, time ()+3156000); // Almacena el ID de sesión en la cookie

echo $count; // Muestra el valor del recuento de la variable de sesión>

--------- - -------------------------------------------------- ------------------------- Después de guardar, utilice el mismo método de detección que cuando tenía permisos de servidor para comprobar si el ID de sesión se guardó correctamente.

Posdata:

De hecho, el verdadero almacenamiento permanente es imposible, porque el tiempo de almacenamiento de las cookies es limitado y el espacio del servidor también es limitado...

Pero para algunos sitios que necesitan guardarse durante mucho tiempo, ¡el método anterior es suficiente! Para otras aplicaciones de Session, puedes

ver el artículo en zphp.com.

Finalmente, el entorno de depuración del autor: Windows98DigExt(SE)+Apache+PHP 4.04. Este artículo proviene del blog de CSDN. Indique la fuente al reimprimir: /yuyuzhou06/archive/2007/11/27/1905017.aspx

.