PHP - Problemas de sesión y cookies

 
Vista:
sin imagen de perfil

Problemas de sesión y cookies

Publicado por anonymous (1 intervención) el 24/03/2022 11:54:34
Buenas a tod@s,

Soy nuevo en el foro en concreto y en la informática en general. Quiero pedir disculpas por si estoy preguntando en una sección del foro que no corresponde y agradecería que se me inidicara la manera de hacerlo correctamente, si fuera el caso.

Estoy empezando a hacer alguna cosa en PHP y con frecuencia me quedo atascado, así que cualquier ayuda será bien recibida y agradecida. En este caso, aunque algo me dice que será el primero de varios, tengo el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<!DOCTYPE html>
<html lang="es">
<?php
// Inicializar la sesión
session_start();
 
if(isset($_POST["g_ciudad"])){
    $ciudad = $_POST["g_ciudad"];
 
    setcookie("ciudad_", $ciudad, time()+3600);
}
 
// Borrar todas las variables de sesión
if(isset($_POST["borrar"])){
 
    setcookie("ciudad_", $ciudad, 1);
 
    unset($_SESSION);
 
    session_destroy();
 
 
}else if(isset($_POST["grabar"])){
 
    if(isset($_POST["telefono"]) && isset($_POST["cp"])){
        $telefono = $_POST["telefono"];
        $cp = $_POST["cp"];
 
        if($telefono != "" && $cp != ""){
            $_SESSION["telefono"] = $telefono;
            $_SESSION["cp"] = $cp;
            header("HTTP/1.1 301 Moved Permanently");
            header("Location: sesion.php");
        }else{
            header("HTTP/1.1 301 Moved Permanently");
            header("Location: login.php");
        }
    }
}
 
 
?>
<head>
    <style>
        @import url(estilo.css);
    </style>
    <title>Sesión</title>
</head>
 
<body>
 
    <fieldset>
        <legend>Sesión</legend>
 
        <form action="sesion.php" method="post">
            <div>
                <label>Teléfono:</label>
                <input type="tel" name="telefono" value="<?php if (isset($_SESSION["telefono"])) echo $_SESSION["telefono"] ?>" />
            </div>
            <div>
                <label>Código postal:</label>
                <input type="text" name="cp" value="<?php if (isset($_SESSION["cp"])) echo $_SESSION["cp"] ?>"/>
            </div>
            <div>
                <label>Ciudad:</label>
                <select name="ciudad" id="ciudad">
                    <option value="huelva" <?php if (isset($_SESSION["ciudad"]) && $_SESSION["ciudad"] == "huelva") echo "selected"  ?>>Huelva</option>
                    <option value="sevilla" <?php if (isset($_SESSION["ciudad"]) && $_SESSION["ciudad"] == "sevilla") echo "selected"  ?>>Sevilla</option>
                    <option value="cordoba" <?php if (isset($_SESSION["ciudad"]) && $_SESSION["ciudad"] == "cordoba") echo "selected"  ?>>Córdoba</option>
                    <option value="cadiz" <?php if (isset($_SESSION["ciudad"]) && $_SESSION["ciudad"] == "cadiz") echo "selected"  ?>>Cádiz</option>
                    <option value="granada" <?php if (isset($_SESSION["ciudad"]) && $_SESSION["ciudad"] == "granada") echo "selected"  ?>>Granada</option>
                    <option value="malaga" <?php if (isset($_SESSION["ciudad"]) && $_SESSION["ciudad"] == "malaga") echo "selected"  ?>>Málaga</option>
                    <option value="jaen" <?php if (isset($_SESSION["ciudad"]) && $_SESSION["ciudad"] == "jaen") echo "selected"  ?>>Jaén</option>
                    <option value="almeria" <?php if (isset($_SESSION["ciudad"]) && $_SESSION["ciudad"] == "almeria") echo "selected"  ?>>Almería</option>
                </select>
            </div>
            <div>
                <input type="submit" value="Grabar ciudad" name="g_ciudad" />
            </div>
            <div>
                <input type="submit" value="Grabar" name="grabar" />
            </div>
            <input type="reset" value="Borrar" name="borrar" />
 
        </form>
    </fieldset>
</body>
 
</html>

Con este código pretendo hacer lo siguiente:

-Establecer un campo cp y uno telefono

-Establecer un desplegable de ciudades, además de un botón Grabar ciudad, que almacena la selección en una cookie

-Establecer dos botones: uno Guardar, que almacena los datos de cp y telefono en una sesión; y otro Borrar, que borra tanto los datos de cp y telefono en la sesión como la cookie con el dato de la ciudad

-Si no se ha establecido sesión, la página te dirige a otra llamada login.php

-Si la sesión ya está establecida, los valores introducidos/seleccionados deben aparecer por pantalla


Mis problemas actualmente son:

-Desconozco si lo que estoy haciendo sentido o no, por lo que me gustaría que alguien me dijera qué tal está el código

-Más concretamente, tengo 2 problemas: la cookie no se guarda y el botón Borrar no borra nada

Probablemente haya más errores, pero no alcanzo a verlos ya que, al probar el código, no puedo ver más allá de los errores que planteo. Por tanto, estaré encantado de que se me indique cualquier cosa adicional que esté mal.

Muchas gracias por adelantado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problemas de sesión y cookies

Publicado por teayudo (5 intervenciones) el 24/03/2022 13:38:37
Pues mi querido Daniel, la verdad es que tu enfoque tiene muchos reparos.

Estás mezclando almacenamiento tanto en sesión como en cookies, y si esto fuese una aplicación a publicar en un server, donde los potenciales clientes que la usen, tengan deshabilitado el uso de cookies, hasta ahí te llega la dicha, normalmente y por seguridad un usuario mantiene esa opción inhabiltada, además porque una cookie eventualmente representa un potencial peligro para cualquier pc, ahí pueden camuflar troyanos y cualquier cantidad de virus.

Por otra parte tienes quemadas las ciudades, y pues si bien eso no tiene crecimiento, esto se hace es consumiendo esas ciudades desde la BD, mediante ayax, para que no refresque toda la página completa, sino únicamente las ciudades asociadas a la provincia implicada, es decir que si la lista selecciona Madrid por ejemplo debería cargar Aranjuez, Fuenlabrada y las demás.

En sesión se almacenan cosas que deban persistir por alguna razón, lo tuyo es simplemente pasar esos datos por post hacia otro form supongo donde luego de unas validaciones almacenes en una BD y listo, no le veo la necesidad de sesión y cookies.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar