La sesión se refiere al tiempo que transcurre desde que se ingresa al sitio web hasta que se cierra el navegador cuando el usuario se encuentra navegando por un sitio web, es decir, el tiempo que el usuario pasa navegando por el sitio web. De la definición anterior, podemos ver que la sesión es en realidad un concepto de tiempo específico.
En términos generales, las variables (en referencia a las variables del lado del servidor, lo mismo a continuación) en una determinada página del sitio web no se pueden usar en la página siguiente. Es más fácil de manejar con la sesión. Las variables registradas en la sesión se pueden utilizar como variables globales. De esta manera, podemos utilizar la sesión para la autenticación de la identidad del usuario, el registro del estado del programa y la transferencia de parámetros entre páginas.
¿Cómo se implementa la sesión en la versión PHP3?
PHP3 en sí no implementa la función de sesión. Solo podemos usar otros métodos para implementarla, el más famoso de los cuales es phplib. Las funciones más básicas de phplib incluyen autenticación de usuario, gestión de sesiones, permisos y abstracción de bases de datos. A continuación describiremos cómo usar phplib para implementar la sesión.
1. Primero instale phplib (el entorno es win2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21 para win32).
Primero, descomprima phplib. Copie este directorio en Apache. directorio de instalación. Por ejemplo: Apache está instalado en el directorio d:Apache, luego copie el directorio "php" en d:Apache y copie los archivos y directorios en el directorio de páginas del directorio phplib (excluyendo el directorio en sí) en d: Bajo Apachehtdocs.
La biblioteca de clases phplib debe inicializarse de acuerdo con el sistema, y es posible que sea necesario modificar el archivo local.inc, que contiene algunos parámetros básicos, que se pueden modificar de acuerdo con la situación real de su propia máquina.
Cambie el programa en el archivo d:Apachephpprepend.php a lo siguiente:
if (!isset($_PHPLIB) o !is_array($_PHPLIB)) {
$_PHPLIB["libdir"] = "d:/Apache/php/" //La ruta al directorio php en phplib
}
Modifique el archivo d:Apachephplocal.inc:
class DB_Example extends DB_Sql {
var $Host = "localhost"; //El nombre del host de la base de datos mysql var $Database = "test"; //Nombre de la base de datos var $User = "root" //Nombre de usuario de la base de datos var $Password = "1234567"; // Contraseña de usuario de la base de datos
}
Finalmente, la tabla inicial se genera en función del archivo create_database.mysql en el subdirectorio de cosas bajo el directorio phplib.
Dado que cada página que usa phplib primero debe poder encontrar los archivos de biblioteca de clases necesarios para ejecutar phplib, podemos configurar la variable auto_prepend en php.ini para admitirlo. phplib contiene un archivo prepend.php y especifica auto_prepend como "d: /. Apache/php/prepend.php" (entre comillas), cada página incluirá automáticamente la biblioteca de clases phplib. También podemos agregar el directorio donde se encuentra la biblioteca de clases phplib a la variable de inclusión para que se puedan encontrar estos archivos. 2. Llame a la función page_open()
En cada página que use phplib, primero debe llamar a la función page_open para la inicialización, por ejemplo:
<?php.
page_open(array("sess" => "Test_Session"));
?>
Las variables de matriz (sess) se utilizan para inicializar algunos objetos de guardado de estado. Cabe señalar aquí: se deben usar los nombres integrados de phplib (sess). Estos nombres integrados se definen en local.inc.
Debido a que phplib usa cookies para guardar información de estado, se debe llamar a la función page_open() antes de que el contenido de la página se envíe al navegador. El script php debe terminar con page_close(), que escribirá los datos de estado relevantes en la base de datos; de lo contrario, las variables se perderán.
3. Uso específico.
Después de registrar una variable, puede usarla en páginas posteriores hasta que finalice la sesión. Método:
<?php $sess->register( "varname"); ?>
Tenga en cuenta que varname aquí no es un valor de variable, sino un nombre de variable. Puede especificar el nombre de la variable primero y luego asignar el valor. Puede cambiar el valor de una variable en una página determinada y el valor modificado se obtendrá cuando se acceda a la variable en páginas posteriores. Los tipos de variables son diversos y pueden ser una cadena, un número o una matriz. Por ejemplo:
primera página:
<?php
page_open(array("sess" => "Prueba _Sesión"));
$sess->register( "welcome"); //Registrar variable $welcome, tenga en cuenta que no es necesario agregar $
$bienvenido="¡Hola, mundo PHP!";
…
página_cerrar();
?>
Segunda página:
<?php
page_open();//Iniciar sesión
echo $welcome;//Mostrar $welcome definido en la primera página
page_close();//Guardar información de estado
?>
Después de registrar una variable, cuando la página finalmente llame a la función page_close(), cada variable de sesión se volverá a escribir en la base de datos. Si olvida llamar a la función page_close(), las variables no se volverán a escribir en la base de datos, lo que tendrá consecuencias impredecibles. Cuando la variable se ha utilizado y ya no es necesaria, se puede llamar a la siguiente función para eliminar la variable:
<?php
page_open(array("sess" => "Prueba _Sesión"));
…
$sess->unregister( "nombre_variable");
…
página_cerrar();
?>
¿Cómo implementar la sesión en la versión PHP4?
La sesión de PHP4 también depende de cookies para guardar los identificadores de sesión y utiliza el sistema de archivos para guardar variables (por lo tanto, sus variables de sesión no pueden guardar objetos). Por supuesto, la sesión también se puede guardar en la base de datos.
Hay muchas funciones relacionadas con la sesión en php4 (consulte el artículo Configuración de php.ini para obtener más detalles. Normalmente solo necesitamos llamar a tres funciones: session_start(), session_register(), session_is_registered().
Llame a la función session_start() al principio de cada página que requiera sesión, por ejemplo:
<?session_start()?>
<html><cuerpo>
<?
$bienvenido="¡hola mundo!";
session_register("welcome");//Registrar la variable $welcome, tenga en cuenta que no hay ningún símbolo $ if(session_is_registered("welcome"))//Compruebe si la variable $welcome está registrada echo "¡la variable de bienvenida ha sido registrada!";
demás
echo "¡La variable de bienvenida aún no se ha registrado!";
?>
</body></html>
Para personalizar el procesamiento de la sesión en php4,
necesitamos expandir 6 funciones:
·sess_open($sess_path, $session_name);
esta función es llamada por el controlador de sesión para la inicialización.
El parámetro $sess_path corresponde a la opción session.save_path en el archivo php.ini. El parámetro $session_name corresponde a la opción session.name en php.ini.
·sess_close();
Esta función se llama cuando la página finaliza la ejecución y el controlador de sesión necesita cerrarse
·sess_read($key)
Esta función recupera y devuelve el identificador cuando el controlador de sesión lee el valor de la clave de sesión especificada ($key); ) Datos de sesión de $key (Nota: la serialización es una tecnología que guarda variables u objetos en un archivo al final del programa o cuando es necesario, y luego los transfiere a la memoria cuando el programa se ejecuta o es necesario la próxima vez). es diferente del método de guardar solo datos)
·sess_write($key, $val);
esta función se llama cuando el controlador de sesión necesita guardar los datos, lo que a menudo sucede al final del programa. Es responsable de guardar los datos en un lugar donde puedan recuperarse la próxima vez usando la función sess_read($key).
·sess_destroy($key);
Esta función necesita destruir la sesión. Es responsable de eliminar la sesión y limpiar el entorno.
·sess_gc($maxlifetime);
Esta función es responsable de limpiar fragmentos. En este caso, es responsable de eliminar los datos de sesión obsoletos. Los controladores de sesión los llaman ocasionalmente.
El programa personalizado puede utilizar una base de datos mysql o un archivo DBM para guardar datos de la sesión, según la situación específica. Si usa mysql como soporte, debe realizar los siguientes pasos:
Primero cree una base de datos de sesiones en mysql y cree una tabla de sesiones:
mysql> CREAR BASE DE DATOS sesiones;
mysql>GRANT seleccionar, insertar, actualizar, eliminar EN sesiones.* A phpsession@localhost
-> IDENTIFICADO POR 'phpsession';
mysql> CREAR TABLA sesiones (
-> sesskey char(32) no nulo,
-> vencimiento int(11) sin firmar no nulo,
-> texto del valor no nulo,
-> CLAVE PRIMARIA (clave de sesión)
-> );
A continuación, modifique las variables $SESS_DB* en el archivo session_mysql.php para que coincidan con la configuración de la base de datos en su máquina:
<?
$SESS_DBHOST = "localhost" /* Nombre del host de la base de datos*/
$SESS_DBNAME = "sesiones" /* nombre de la base de datos*/
$SESS_DBUSER = "phpsession" /* Nombre de usuario de la base de datos*/
$SESS_DBPASS = "phpsession" /* Contraseña de la base de datos*/
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
……//Función personalizada
session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
Personaliza la interfaz al usar archivos dbm:
<?
$SESS_DBM = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
……//Función personalizada
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
Código de prueba personalizado de sesión:
<?php
…
if ($handler == "dbm") include("session_dbm.php");//Qué interfaz usar
elseif ($handler == "mysql") include("session_mysql.php");
de lo contrario…
inicio_sesión();
session_register("recuento");
…
?> ¿
Cómo utilizar la sesión en la autenticación?
La sesión se puede utilizar para la autenticación del usuario:
verifique si el usuario es legítimo:
<?
inicio_sesión();
……//Proceso de verificación session_register("reguser");
?>
Comprobar si el usuario ha iniciado sesión en otra página
<?
inicio_sesión();
if(isset($reguser)&&$reguser!=""){//Si ha iniciado sesión echo "Estimado usuario, bienvenido";
}else{//Si no ha iniciado sesión echo "¡Regístrese primero!";
}
?>
El usuario cierra sesión:
<?
sesión_destroy();
…
?> ¿
Cómo implementar múltiples sesiones ejecutándose simultáneamente?
Pregunta: Cuando estaba escribiendo un sistema de compras, ventas e inventario para mi unidad, encontré que era necesario permitir que varios usuarios ingresaran a una aplicación PHP al mismo tiempo. El ID de sesión único estático diseñado originalmente provocó confusión en los datos. De esta manera, generar dinámicamente una ID de sesión única se convierte en una prioridad absoluta.
La solución es simple: utilicé el nombre del archivo php + marca de tiempo como ID de sesión única, para que cada sesión en mi programa esté en su lugar y ya no haya confusión.
Publicaré mi código fuente a continuación para que los amigos que tengan el mismo problema puedan encontrar una solución.
//Iniciar una sesión PHP para preservar las variables.
if (vacío($nombredesesión)) {
$micro = microtiempo();
$micro = str_replace(" ","",$micro); // elimina los espacios en blanco
$micro = str_replace(".","",$micro); // elimina los puntos
$mysessionname = "po_maint" $micro;
}
nombre_sesión($nombremisesión);
session_start();
Notas del programa:
use mysessionname para pasar variables para el nombre de sesión único entre páginas. Si también usa este nombre, debe realizar un pequeño cambio en el programa anterior. Mysessionname no puede ser el nombre de la variable interna de la sesión porque ya existe antes de que comience la sesión. Mysessionname no se puede almacenar en modo cookie, porque varias sesiones definitivamente sobrescribirán el archivo cookie original. Puede guardarlo usando campos de formulario ocultos. Entonces no habrá ningún problema.