La variable $_SESSION es una Superglobal en PHP, por tanto está disponible en cualquier parte de los scripts sin la necesidad de usar un global de llamada. está variable es muy similar a un $_COOKIE pero la diferencia es que se graba en el servidor y dura hasta que el navegador sea cerrado (no la pestaña de visualización, hablo de cerrar el navegador completo).
Esto es útil por ejemplo para carritos de compra, guardar cierta configuración solo para esa visita en especial, etc.
Si en alguna parte de un script (pagina1.php) guardamos un valor usando esa variable
$_SESSION['nickname']="Jhonnyf";
Esta variable estará disponible en cualquier otro script (pagina2.php, test.php, cualquierpagina.php) mientras el navegador NO SEA CERRADO se podrá tener acceso a los datos grabados ahí.
Como usarlo:
Lo primero es llamar a la función que Inicia/Continua la sesión y desde ahí ya puedes comenzar a grabar
session_start(); $_SESSION['nickname'] = 'Jhonnyf';
Luego de eso, en otro script debes volver a llamar a la función session_start(); y usar la variable previamente grabada.
Por ejemplo vamos a grabar un Nickname en un script y luego usarlo en otros 2 scripts
pagina1.php
<?php session_start(); //Iniciamos o Continuamos la sesión if (isset($_POST['txtusuario'])) //Si llego un Nickname vía el formulario lo grabamos en la sesión { $_SESSION['nickname'] = $_POST['txtusuario']; //Nickname Grabado } if ($_SESSION['nickname']) //Si hay un nickname en la sesión actual, creamos una variable que será mostrada { $grabado="El valor Grabado Previamente es: <strong>".$_SESSION['nickname']."</strong><br /> <a href='pagina2.php'>pagina2.php</a>"; } ?> <html> <head> </head> <body> <?php echo ($grabado); //El mensaje si hay nickname?> <form action="" method="post"> Escribe tu Nickname: <input type="text" size="25" name="txtusuario" value="<?php echo $_SESSION['nickname'];?>"/> <br /> <input type="submit" value="Grabar" /> </form> </body> </html>
pagina2.php
<?php session_start(); //Iniciamos la sesión o la Continuamos if ($_SESSION['nickname']) { $grabado="El valor Grabado en <a href='pagina1.php'>pagina1.php</a> fue: <strong>".$_SESSION['nickname']."</strong><br />"; //Si existe un nickname generamos el mensaje } else { $grabado="No has grabado ningún Nickname visita la <a href='pagina1.php'>pagina1.php</a>"; //Mensaje que no existe nada Grabado } ?> <html> <head> </head> <body> <?php echo ($grabado); ?> </body>
Puedes verlo en funcionamiento en los siguientes enlaces:
http://www.elcodigofuente.com/ejemplos/pagina1.php
http://www.elcodigofuente.com/ejemplos/pagina2.php
Si entras primero en la pagina2.php no veras nada grabado ya que es la pagina1.php donde se graban los datos, y solo se eliminan los datos cuando cierras el navegador web.
Aquí los archivos para descargar:
U wont beleive how hard has been to find this solution. Many thnx
BTW, you need to change:
if ($_POST[‘txtusuario’])
with
if (isset($_POST[‘txtusuario’]))
Thnx again
yes, you’re right!
thank you
Excelente tutorial, me gusto mucho y me ha salvado, lo recomiendo mucho (Y). Gracias
hola amigo:
estoy aprendiendo PHP, ya tengo un carrito de la compra y me guarda todos mis datos bien con una variable de session;
como se puede hacer para que, una vez utilizado esa variable de session, se vacie todo el contenido para nuevas compras, ya que al regresar al carrito me vuelve a mostrar lo que existe en la variable de session
Podrías ayudarme?
Gracias
simplemente luego de usar el carrito, destruye las variables que contiene la información con un unset,
unset($session[‘carrito’])
eso si, te recomiendo que todo el carrito sera un array en session y no usar todo session como si fuera un carrito, es decir, dentro de $session[‘carrito’] hacer mas array para toda la informacion referente.
Para hacer lo del carrito hay que crear una clase y usar serialize y unserialize para trasladar los valores cargados en el objeto de página en página… la clase sería algo así:
class Carrito{
//propiedades
private $nPro; /*número de productos de la compra se entiende como el indice de los arreglos*/
private $array_id_pro;
private $array_nombre_pro;
private $array_precio_pro;
private $array_cant_pro;
//métodos
public function Carrito(){
$this->num_productos=0;
//echo “Carrito Instanciado”;
}
public function infoCarrito(){
return ‘Hi I\’m the car’;
}
public function getnPro(){
return $this->nPro;
}
//Introducir Producto
public function putProducto($idpro,$nombrepro,$preciopro,$cantpro){
$this->array_id_pro[$this->nPro]=$idpro;
$this->array_nombre_pro[$this->nPro]=$nombrepro;
$this->array_precio_pro[$this->nPro]=$preciopro;
$this->array_cant_pro[$this->nPro]=$cantpro;
//Luego de meter el producto incrementamos el índice del número de producto
$this->nPro++;
}
public function borrarProducto($indicePro){
$this->array_id_pro[$indicePro]=0; //pone el valor del codigo del producto en cero
}
public function showProductos(){
$suma = 0;
echo ‘
Id
Nombre producto
Precio
Cantidad
Eliminar
‘;
for ($i=0;$inPro;$i++){
if(isset($this->array_id_pro[$i])>0){
echo “”;
echo “” . $this->array_id_pro[$i] .””;
echo “” . $this->array_nombre_pro[$i].””;
echo “” . $this->array_precio_pro[$i] . “”;
echo “” . $this->array_cant_pro[$i] . “”;
echo ““;
echo “”;
$suma += $this->array_precio_pro[$i];
}
}
//muestro el total
echo “TOTAL: $suma “;
//total más IVA
echo “IVA (12%): ” . $suma * 0.12 . “ “;
echo “”;
}
}
Hola. Tu ejemplo está muy bueno por su sencillez, pero quería pedirte ayuda porque a mí me da varios errores. Cuando lo corro por primera vez me dice que ‘txtusuario’ no está definido como index. Igual con ‘nickname’ no está definido como index. Después me dice que $grabado no está definido. Y por último, en el campo text del input me aparece “Notice: Undefined index: nickname in C:\localhost\SESSION\pagina1.php on line 21”
Los tres primeros los resolví agregando ‘isset’ y declarando $grabado = ‘ ‘ ,pero el del campo text no pude hacer nada.
De todas maneras me da mucha curiosidad de por qué a ti sí te funciona bien y a mí no. ¿Será algo de la configuración de PHP en mi máquina?
Gracias !!!
muchas gracias ya me queda un poco mas claro la situacion respecto a esta variable global !! 😀
Pido su ayuda, ya que usted conoce bastante de PHP, necesito pasar una variable entre distintas páginas .php, por favor podría enviarme un ejemplo de ello usando session_start() y $_SESSION[‘valor’], claro está usando method=”post”…
Muchas gracias…
Arturo Ramírez…
$_session[‘valor’] = ‘al valor que necesitas’
$valor = $_POST[‘valor’]; //valor que traes del post
$_SESSION[‘valor’] = $valor; //valor que le das a la variable session
Una pregunta, ¿puedo traer mas datos del usuario de una tabla con la varible $_SESSION?
Hola muy buen ejemplo, no habia encontrado nada!! este funciono, pero como puedo hacer para que al llenar mi carrito agarre el “id” y no que se agrege a todos los articulos lo mismo, muchas gracias
Hola saludos, como puedo hacer para que no se repita la misma variable en un carrito de compras, sino que agarre el “id”, del articulo y aparezca la variable que le corresponde si me explico?
Hola muy interesante artículo. Cuál es la diferencia entre utilizar $_SESSION[] o usar $GLOBALS[]. Son similares?
Gracias.
excelente. gracias
Buenas, que tal
Gracias por el ejemplo de código
un detalle, el plugin que tienes para poner el código no permite copiar-pegar el código, ni ningúna de las funciones, por lo menos usando chrome no me ha dejado.
Saludos
Mil Gracias !!!
gracias me ayudo mucho tu codigo.
Excelente. =)
gracias !!!!!!1