PHP - mantener la sesion de administrador o usuario despues del login

   
Vista:

mantener la sesion de administrador o usuario despues del login

Publicado por daniel (50 intervenciones) el 11/07/2016 06:49:23
ushola, a todos los que me lean:
espero que alguien me ayude con el siguiente problema...
estoy creando un login con unos codigos que encontre en la web, todo va bien, pero el unico problema es que no se como mantener la sesion diferenciada entre admin, moderador o usuario, en las paginas de tales,
por ejemplo el admin tiene el derecho a entrar en todo el sitio o sea en index.php, moderadores.php y admin.php...
el moderador a index.php y moderador.php, por ultimo el usuario normal solo al index.php,...
(no se que codigo va en admin,php moderador.php e index.php)

no estoy seguro pero a base del codigo que tengo se me ocurre que para hacerlo hay que hacer una comparacion en cada seccion con la variable $_SESSION["Nivel_Acceso"],...
aqui dejo el codigo de lo que llevo:

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
<?php
session_start();
if(@$_GET['cerrar'])
{
	session_unset('Nombre');
	session_destroy();
 
}
if(@$_POST['enviado'])
{
	@$usuario= mysql_real_escape_string($_POST['Nombre']);
	@$contra= mysql_real_escape_string($_POST['Contra']);
	@$Estado=$_POST['1'];
	if(!empty($usuario))
	{
		if(!empty($contra))
		{
			$consulta=mysql_query("select * from users_donadores where Nombre='$usuario' and Contra='$contra' and Estado='$Estado'");
			if(mysql_num_rows($consulta))
			{
				$arreglo=mysql_fetch_array($consulta);
				$_SESSION['Nombre']=$arreglo['Nombre'];
				session_start();
 
                if ($arreglo['Nivel_Acceso']==Usuario)
                {
                    $_SESSION["Nivel_Acceso"]==Usuario;
                    Header("Location:index.php");
                }else if ($arreglo['Nivel_Acceso']==Moderador){
                    $_SESSION["Nivel_Acceso"]==Moderador;
                    Header("Location:moderadores/Lista_All_Trailers.php");
					}else if ($arreglo['Nivel_Acceso']==Administrador){
                    $_SESSION["Nivel_Acceso"]==Administrador;
                    Header("Location:moderadores/admin_prueba.php");
                }
			}else{
				$error[3]="usuario o contraseña incorrecta";
			}
		}else
		{
			$error[1]="ingrese la contraseña";
		}
	}else
	{
		$error[2]="ingrese usuario";
	}
}
?>

ademas, si alguien tiene alguna sugerencia de quitar o agregar algo al código es bien recibido también,
bueno espero alguna ayuda, de antemano gracias y saludos.
PD: ademas se me olvidaba mencionar los campos de la bd: son idusuario(int), nombre(varchar) , contra(varchar) , estado(int) y nivel(varchar).
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 xve

mantener la sesion de administrador o usuario despues del login

Publicado por xve (5519 intervenciones) el 11/07/2016 11:23:20
Hola Daniel, estas comparaciones son erroneas... esto no es correcto:
1
if ($arreglo['Nivel_Acceso']==Usuario)
tendría que ser algo así:
1
if ($arreglo['Nivel_Acceso']=="Usuario")

lo mismo sucede con el resto de comparaciones...

Puede ser este el problema?
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

mantener la sesion de administrador o usuario despues del login

Publicado por daniel (50 intervenciones) el 11/07/2016 11:52:28
hola nuevamente xve gracias por responder...

entonces mas o menos como seria la comparacion correcta??
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

mantener la sesion de administrador o usuario despues del login

Publicado por daniel (50 intervenciones) el 11/07/2016 12:34:30
gracias por corregirme no habia visto la linea de tu correccion...
aparte de ese error no se como recibir las variables de sesion para las paginas de admin, moderador, usuario,etc para que por ejemplo en las paginas del admin solo el admin tenga el acceso y no los usuario, para explicarlo mejor por ejemplo tengo la pagina admin.php
se que al principio hay que poner
1
session_start();
,
tambien el link para cerrar la secion
1
<a href="Login_Donadores.php?cerrar=session">cerrar sesion(<?php echo @$_SESSION ['Nombre'] ?>)</a>
y tambien
1
2
3
4
<?php
if(isset($_SESSION['Nombre']))
{
?>
1
2
3
4
<?php
}else
echo "inicia sesion";
 ?>
pero no se como mantener la sesion en esta pagina(la de admin.php)
OJO: el codigo que mostré en el primer mensaje es de login.php y logea bien aunque no se si hay que modificarlo para hacer lo que yo quiero
PD: se que esto se puede hacer con niveles de acceso por eso creé el campo Nivel_Acceso el cual tiene en los campos : Aministrador, moderador y usuario
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

mantener la sesion de administrador o usuario despues del login

Publicado por kip (567 intervenciones) el 11/07/2016 14:32:26
Hola, si lo que deseas es restringir el acceso, seria algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
//Inicio la sesión
session_start();
//COMPRUEBA QUE EL USUARIO ESTA AUTENTICADO
if ($_SESSION["Nivel_Acceso"] == "Administrador") {
// continua con la pagina
} else {
//si no existe, va a la página que desees, en este ejemplo a login.php
header("Location: login.php");
//salimos de este script
exit();
}
?>

Ahora bien, tal como te comento xve, al comparar debes hacerlo correctamente, si es un string debe estar encerrado en comillas, ten en cuenta eso.

Espero sea lo que necesites, nos cuentas como te fue.

Saludos
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

mantener la sesion de administrador o usuario despues del login

Publicado por daniel (50 intervenciones) el 11/07/2016 15:58:24
hola kip, gracias por responder, eso es lo que busco, lo coloque en admin.php, pero me sale "Undefined index: Nivel_Acceso", creo que es porque no definí
Nivel_Acceso ni en login ni en admin, ademas no se como ni donde. el error esta en la linea que me diste
1
if ($_SESSION['Nivel_Acceso'] == "Administrador"){;
.
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

mantener la sesion de administrador o usuario despues del login

Publicado por kip (567 intervenciones) el 11/07/2016 16:26:46
No me habia fijado en ciertos errores que tienes en las primeras lineas de codigo que colocaste, crei que el que te señalo xve era el uncio pero aca hay otro y es por eso que no puedes hacer lo que te recomende ya que el error que te marca es que dicho indice en la variable SESSION no existe, aca el error:

1
2
3
4
5
6
7
8
9
10
11
if ($arreglo['Nivel_Acceso']==Usuario)
                {
                    $_SESSION["Nivel_Acceso"]==Usuario;
                    Header("Location:index.php");
                }else if ($arreglo['Nivel_Acceso']==Moderador){
                    $_SESSION["Nivel_Acceso"]==Moderador;
                    Header("Location:moderadores/Lista_All_Trailers.php");
					}else if ($arreglo['Nivel_Acceso']==Administrador){
                    $_SESSION["Nivel_Acceso"]==Administrador;
                    Header("Location:moderadores/admin_prueba.php");
                }

Primero, haces una comparacion erronea, la palabra Usuario deberia ir entre comillas como te lo mencione
1
2
if ($arreglo['Nivel_Acceso']==Usuario) // error
if ($arreglo['Nivel_Acceso'] == "Usuario") // solucion

Ahora este de aca que en lugar de asignar, usas doble = y deberia ser solo un = para asignar el valor a la variable, asi mismo las palabras entre comillas:
1
2
3
$_SESSION["Nivel_Acceso"]==Moderador;//error
$_SESSION["Nivel_Acceso"] = "Moderador";//solucion
                    Header("Location:moderadores/Lista_All_Trailers.php");

Tambien si colocas session_start() al inicio del script no es necesario volver a colocar aquella funcion.

Corrige eso y creo que ya estara.

Nos cuentas como vas.
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 la sesion de administrador o usuario despues del login

Publicado por daniel (50 intervenciones) el 11/07/2016 17:37:03
Muchas Gracias Master, resultó,
Por Si a alguien mas le sirve, aqui dejo el codigo:
Login.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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
//me conecto a la bd
require_once('../Connections/pelislatino.php');
 ?>
<?php
//definir database
 mysql_select_db($database_pelislatinofinal,$pelislatino) or die ("no se pudo conectar");
 ?>
<?php
session_start();
if(@$_GET['cerrar'])
{
	session_unset('Nombre');
	session_destroy();
 
}
if(@$_POST['enviado'])
{
	@$usuario= mysql_real_escape_string($_POST['Nombre']);
	@$contra= mysql_real_escape_string($_POST['Contra']);
	@$Estado=$_POST['1'];
	if(!empty($usuario))
	{
		if(!empty($contra))
		{
			$consulta=mysql_query("select * from users_donadores where Nombre='$usuario' and Contra='$contra' and Estado='$Estado'");
			if(mysql_num_rows($consulta))
			{
				$arreglo=mysql_fetch_array($consulta);
				$_SESSION['Nombre']=$arreglo['Nombre'];
                if ($arreglo["Nivel_Acceso"]=="Usuario")
                {
                    $_SESSION["Nivel_Acceso"]="Usuario";
                    Header("Location:index.php");
                }else if ($arreglo["Nivel_Acceso"]=="Moderador"){
                    $_SESSION["Nivel_Acceso"]="Moderador";
                    Header("Location:moderadores/Lista_All_Trailers.php");
					}else if ($arreglo["Nivel_Acceso"]=="Administrador"){
                    $_SESSION["Nivel_Acceso"]="Administrador";
                    Header("Location:moderadores/admin_prueba.php");
                }
			}else{
				$error[3]="usuario o contraseña incorrecta";
			}
		}else
		{
			$error[1]="ingrese la contraseña";
		}
	}else
	{
		$error[2]="ingrese usuario";
	}
}
?>

El Formulario, Que tambien está en login.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<form id="form1" name="form1" method="post" action="?">
  <table width="332" border="1">
    <tr>
      <td width="137">Usuario</td>
      <td width="179"><label for="Nombre"></label>
      <input type="text" name="Nombre" id="Nombre" /><br>
      <?php echo @$error[2];?></td><br>
    </tr>
    <tr>
      <td>Password</td>
      <td><label for="Contra"></label>
      <input type="password" name="Contra" id="Contra" /><br>
      <?php echo @$error[1];?></td><br>
    </tr>
    <tr>
      <td colspan="2"><input type="hidden" name="Estado" id="Estado" /></td>
    </tr>
    <tr>
      <td colspan="2"><input type="submit" name="enviado" id="enviado" value="Iniciar" /><br>
      <?php echo @$error[3];?></td><br>
    </tr>
  </table>
</form>

y la pagina admin_prueba.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//recuperamos o iniciamos la sesion
<?php session_start(); ?>
<?php
//nos conectamos a la bd
require_once ("../../Connections/pelislatino.php");
?>
<?php
//Seleccionamos la base de datos
mysql_select_db($database_pelislatinofinal,$pelislatino); ?>
<?php
//restringimos el acceso dejandolo solo para admins y moderadores, si solo queremos admins borrar  or $_SESSION['Nivel_Acceso'] == "Moderador"
if ($_SESSION['Nivel_Acceso'] == "Administrador" or $_SESSION['Nivel_Acceso'] == "Moderador"){;
?>
<?php
}else
echo "mensaje si no tiene permiso paraentrar a esta seccion";
 ?>

Muchas gracias kip por la ayuda y tambien a xve.
saludos a los dos,
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