PHP - Mantener sesion abierta aun cerrando el navegador

 
Vista:

Mantener sesion abierta aun cerrando el navegador

Publicado por Sam (185 intervenciones) el 22/09/2016 10:47:56
Hola amigas/os, a ver si me pueden ayudar con esto que llevo mucho con ello y no atino.

Miren el objetivo es que cuando la gente se loguee, exista una opción de mantener la sesión abierta, aun

después de haber cerrado el navegador.

Así cuando vuelva a entrar en la pagina no tendría la necesidad de loguearse de nuevo.

Para ello en el formulario he puesto un checbox para dejar ,o no, la sesión abierta.


En el lado del php he puesto lo propio para que la cokie correspondiente expire pasado mucho tiempo.


Pero para variar, se que estoy fallando en algo pero no se en que.

Agradecería que me pudierais ayudar llevo mucho con ello y no doy con la solucion.

Aquí pongo el código, gracias de antemano.


Formulario:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<form role="form" name="login" action="php/login.php" method="post">
		  <div class="form-group">
		    <label for="username">Nombre de usuario o email</label>
		    <input type="text" class="form-control" id="username" name="username" placeholder="Nombre de usuario">
		  </div>
		  <div class="form-group">
		    <label for="password">Contrase&ntilde;a</label>
		    <input type="password" class="form-control" id="password" name="password" placeholder="Contrase&ntilde;a">
		  </div>
 
 
 
<label>Mantener sesión abierta</label>
 
<input type="checkbox" name="mantener_sesion_abierta" value="si"><br>
 
 
 
		  <button type="submit" class="btn btn-default">Acceder</button>
		</form>



Codigo php:
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
$nombre = $_POST["username"];
$password = $_POST["password"];
 
 
echo "Nombre: " . $nombre . "<br/>";
echo "Password: " . $password . "<br/>";
 
 
 
if(!empty($_POST["mantener_sesion_abierta"]))
 
	{
		echo "Mantener sesion abierta: " . $_POST["mantener_sesion_abierta"] . "<br/>";
 
		echo setcookie("PHPSESSID", $_COOKIE[session_name()], time()+31622400) . "<br/>";
 
		echo "Sesión abierta indefinidamente.<br/>";
	}
 
	else
 
	{
		echo "Mantener sesion abierta: No <br/>";
 
		echo setcookie("PHPSESSID", $_COOKIE[session_name()]) . "<br/>";
 
		echo "Nombre de la cookie: " . $_COOKIE[session_name()] . "<br/>";
 
		echo "Sesión abierta hasta que cierre el navegador.<br/>";
	}
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
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Mantener sesion abierta aun cerrando el navegador

Publicado por kip (877 intervenciones) el 22/09/2016 15:37:35
Hola, creo que estas creando mal la cookie para poder verificar esta, mira este ejemplo basado en tu codigo:

Primero haremos que se cree la cookie.

1
2
3
4
5
6
7
8
9
10
11
12
13
$nombre = $_POST["username"];
$password = $_POST["password"];
echo "Nombre: " . $nombre . "<br/>";
echo "Password: " . $password . "<br/>";
if (!empty($_POST["mantener_sesion_abierta"])) {
        setcookie("COOKIE_INDEFINED_SESSION", TRUE, time()+31622400);
		setcookie("COOKIE_DATA_INDEFINED_SESSION[nombre]", $nombre, time()+31622400);
        setcookie("COOKIE_DATA_INDEFINED_SESSION[password]", $password, time()+31622400);
		echo "Sesión abierta indefinidamente.<br/>";
} else {
	setcookie("COOKIE_CLOSE_NAVEGADOR", TRUE, 0) . "<br/>";
	echo "Sesión abierta hasta que cierre el navegador.<br/>";
}

He creado 3 cookies para tener la info del usuario para cuando cierre el navegador y lo abra se haga una verificacion interna y asi mismo un login rapido con aquellos datos, seria algo asi:

1
2
3
4
5
6
7
8
if (isset($_COOKIE['COOKIE_INDEFINED_SESSION'])) {
	if ($_COOKIE['COOKIE_INDEFINED_SESSION']) {
		$nombre_user = $_COOKIE['COOKIE_DATA_INDEFINED_SESSION']['nombre'];
		$password_user = $_COOKIE['COOKIE_DATA_INDEFINED_SESSION']['password'];
		//AQUI HACES LA QUERY PARA BUSCAR EN TU BD UN USUARIO Y SU PASSWORD CON LAS VARIABLES ANTERIORES
		header("Location: home.php"); //envias al usuario a home.php si se lo encontro en la BD!
	}
}

Espero funcione y lo entiendas, cualquier duda nos comentas.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Mantener sesion abierta aun cerrando el navegador

Publicado por sam (185 intervenciones) el 26/09/2016 18:26:58
Ufff , llevo varios dias con el codigo que me has puesto y lo entiendo. pero no se por que no me funciona.

Te explico:

Cuando me logueo : usuario + contraseña + chebox (que hace la sesion abierta); pues cuando meto estos datos con un "echo"

me muestra el usuario y contraseña y me dice que se han creado las cookies y me lleva a la pagina a la que se quiere tener acceso una vez logueado.

Pero estando ahí, cierro entonces el navegador y me dice:



Notice: Undefined index: username

Notice: Undefined index: password

Nombre:
Password:

Sesión abierta hasta que cierre el navegador.



Y no entiendo por qué

es decir no veo que me recuerde el usuario y contraseña anteriormente metidas.

mira este es el codigo osea el tuyo + algo mas:

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
$nombre = $_POST["username"];
 
$password = $_POST["password"];
 
 
echo "Nombre: " . $nombre . "<br/>";
 
echo "Password: " . $password . "<br/>";
 
 
 
if (!empty($_POST["mantener_sesion_abierta"]))
 
	{
		/*Si el checkbox está marcado*/
 
		setcookie("COOKIE_INDEFINED_SESSION", TRUE, time()+31622400);
 
		setcookie("COOKIE_DATA_INDEFINED_SESSION[nombre]", $nombre, time()+31622400);
 
		setcookie("COOKIE_DATA_INDEFINED_SESSION[password]", $password, time()+31622400);
 
		echo "Creadas las cookies.<br/>";
 
		echo "Sesión abierta indefinidamente.<br/>";
 
 
	}
 
	else
 
	{
		/*Si el checkbox no está marcado*/
 
		setcookie("COOKIE_CLOSE_NAVEGADOR", TRUE, 0) . "<br/>";
 
		echo "Sesión abierta hasta que cierre el navegador.<br/>";
	}
 
 
 
 
if (isset($_COOKIE['COOKIE_INDEFINED_SESSION']))
 
	{
		if ($_COOKIE['COOKIE_INDEFINED_SESSION'])
 
			{
				$nombre_user = $_COOKIE['COOKIE_DATA_INDEFINED_SESSION']['nombre'];
 
				$password_user = $_COOKIE['COOKIE_DATA_INDEFINED_SESSION']['password'];
 
				//AQUI HACES LA QUERY PARA BUSCAR EN TU BD UN USUARIO Y SU PASSWORD CON LAS VARIABLES ANTERIORES
 
 
include "conexion.php";
 
$user_id=null;
 
$sql1= "select * from user where (username='" . $nombre_user . "' or email='" . $nombre_user . "') and password='" . $password_user . "'";
 
$query = $con->query($sql1);
 
while ($r=$query->fetch_array())
{
	$user_id=$r["id"];
	break;
}
if($user_id==null){
	print "<script>alert(\"Acceso invalido.\");window.location='../login.php';</script>";
}else{
	session_start();
	$_SESSION["user_id"]=$user_id;
 
 
	print "Entré.";
				//header("Location: ../home.php"); 
}
 
			}
	}
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
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Mantener sesion abierta aun cerrando el navegador

Publicado por kip (877 intervenciones) el 26/09/2016 19:26:40
Lo que sucede es que debes crear un script para validar el checkbox de mantener sesion y crear las cookies y otro para verificar que existan las cookies y no muestre el login, este ultimo deberia ir en el archivo login.

El codigo que tienes ahora esta bien pero creo que seria el script tan solo para validar el checkbox y crear la cookie o las cookies, dependiendo de la seleccion del usuario de mantener o no la sesion abierta, ademas de eso, el codigo de buscar la info en la BD no iria alli.

Si te fijas en mi mensaje anterior he colocado la creacion y la verificacion en dos codigos diferentes, asi que te recomiendo aquello.

Si tienes alguna duda nos comentas.
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