Autor
|
Tema: Como hacer inicio de sesion (Leído 8,047 veces)
|
¡Micronet!
Desconectado
Mensajes: 159
|
Lei que tenia que usar config.php // Donde contendra los datos de conexion login.php // Codigo que recibira el user y pass, para loguear si es que este NO esta logueado y guardara en session un identificador de el usuario logueado, si es que logueo logout.php // Aqui checara si esta logueado, hara un unset_session() al session que contiene el identificador de logueado config.php tiene que tener parte del diseño de mi pagina web? o solamente la ocupo para hacer la conexion con mi base de datos no la puedo utilizar unicamente donde este el login.php? logout.php necesito hacerla otra pagina donde tenga diseño o sola la funcionalidad para cerrar la sección? Alguien me podria enviar a un link donde me explique correctamente como hacer un inicio de sección ya que ese lo utilizare para muchas cosas espero puedan ayudarme saludos
|
|
|
En línea
|
"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"
|
|
|
WHK
|
eso de los archivos php es solo un ejemplo, no quiere decir que lo hagas así, es como si yo te dijera que en la hoja 1 de tu cuaderno debes escribir tus daos, en la hoja 7 otra cosa y en la hoja 15 otra cosa,... tu decides como hacerlo, de hecho puedes hacer todo eso con un solo archivo php.
Lo que necesitas aprender es como utilizar session_start(), $_SESSION, session_destroy(), mysql_query(), etc.
Para eso debes aprender un poco de php, mysql, etc a menos que tengas los usuarios con sus contraseñas en un array pero no es recomendable, por ejemplo:
$users = array( 'nick1' => 'pass en md5' );
así después lo comparas con $users[$_GET['user']] == md5($_GET['pass']) pero es solo un ejemplo.
Saludos.
|
|
|
En línea
|
|
|
|
¡Micronet!
Desconectado
Mensajes: 159
|
eso de los archivos php es solo un ejemplo, no quiere decir que lo hagas así, es como si yo te dijera que en la hoja 1 de tu cuaderno debes escribir tus daos, en la hoja 7 otra cosa y en la hoja 15 otra cosa,... tu decides como hacerlo, de hecho puedes hacer todo eso con un solo archivo php.
Lo que necesitas aprender es como utilizar session_start(), $_SESSION, session_destroy(), mysql_query(), etc.
Para eso debes aprender un poco de php, mysql, etc a menos que tengas los usuarios con sus contraseñas en un array pero no es recomendable, por ejemplo:
$users = array( 'nick1' => 'pass en md5' );
así después lo comparas con $users[$_GET['user']] == md5($_GET['pass']) pero es solo un ejemplo.
Saludos.
Gracias de echo lo que pretendo hacer es crear una base de datos y ir acomulando los usuarios conforme a otro formulario para crear los usuarios (mas adelante...) entonces estaba leyendo que necesito crear una base de datos... y en esa los campos correspondientes... y ya con eso manipularia el php... entonces puedo realizar el inicio de session y la conexion de la base de datos en la misma pagina?... (Si lo logro lo voy a postear porque siempre que busco inicio de sección me aparecen que tengo que crear varias paginas... y como yo quisiera hacer en una sola pagina login.php para que funcione... de casualidad sabras una pagina ¿?, si yo la encuentro la pongo... pero si no entonces solo posteo ) gracias. Por mientras voy a usar estos links: http://www.slideshare.net/fabiangm/sesiones-en-phphttp://www.youtube.com/watch?v=Ka6mb8BiEcohttp://www.sectorweb.net/2008/01/17/como-hacer-un-sistema-de-usuarios-con-php-y-mysql/Si sabes algun link donde lo diga de manera mas sencilla y mejor explicada porfavor te agradeceria que me pasaras el link para trabajarlo y muchas gracias
|
|
« Última modificación: 13 Abril 2012, 16:56 pm por ¡Micronet! »
|
En línea
|
"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"
|
|
|
|
Graphixx
Desconectado
Mensajes: 1.336
Full Stack Developer
|
En PHP hay una libreria que en sus tiempos fue exelente, la VAuthenticate... http://scripts.ringsworld.com/user-authentication/vauthenticate-3.0.1/ya que permite gestionar los usuarios por grupos y dentro de dichos grupos por niveles. Echale una mirada, si es para un proyecto de la U te servira, pero si es para una app empresarial no te lo recomiendo.
|
|
|
En línea
|
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx Rōninnovation
|
|
|
¡Micronet!
Desconectado
Mensajes: 159
|
Gracias a los dos opte por el tutorial de WHK, lo que sucede esque... cree mi base como aparece en tutorial... y cree los archivos tal cual me dicen en el tutorial pero cuando... Mi base de datos la cree en PHPmyAdmin hice mi base de datos llamada: foraneo y mi tabla es usuarios Uso: WampServer 2.2 MyPHPAdmin 3.4.5 hice los siguientes .php's para que funcionara lo tengo en mi localhost: mysql.php <?php if(!$SYS) exit; // Evita la visualización directa
$SYS['MYSQL']['USER'] = 'root'; $SYS['MYSQL']['PASS'] = ''; $SYS['MYSQL']['BDATOS'] = 'usuarios'; $SYS['MYSQL']['HOST'] = 'localhost'; // ---------------------------------------------------
$SYS['MYSQL']['HANDLE'] = mysql::crear_handle( $SYS['MYSQL']['USER'], $SYS['MYSQL']['PASS'], $SYS['MYSQL']['BDATOS'], $SYS['MYSQL']['HOST'] );
$_GET = stripslashses_gpc($_GET); $_POST = stripslashses_gpc($_POST); $_COOKIE = stripslashses_gpc($_COOKIE); $_SERVER = stripslashses_gpc($_SERVER);
function stripslashses_gpc($buffer){ if(!function_exists('get_magic_quotes_gpc')) return $buffer; if(get_magic_quotes_gpc()){ if(is_array($buffer)){ foreach($buffer as $variable => $valor){ $temp[$variable] = stripslashses_gpc($valor); } return $temp; }else{ return stripslashes($buffer); } }else{ return $buffer; } }
class mysql{
function crear_handle($user, $pass, $bdatos, $host){ if(!$handle = mysql_connect($host, $user, $pass)) return false; // Imposible conectar if(mysql_select_db($bdatos, $handle)){ return $handle; // Retorna el manipulador }else{ return false; // La base de datos no existe } }
function selecciona($query, $handle, $una_columna = false){ if(!$query = mysql_query($query, $handle)) return false; // La query falló else{ while($fila = mysql_fetch_array($query, MYSQL_ASSOC)){ $retorno[] = $fila; // Llena la variable con las filas retornadas } @mysql_free_result($query); // Livera memoria } if($una_columna) return $retorno[0]; // Devuelve una sola columna return $retorno; // Devuelve todas las columnas } } ?> usuarios.php <?php if(!$SYS) exit; // Evita la visualización directa
class user{
function registrar($data_array){ /* Verifica que cada dato sea real */ /* Falta el nick */ if(!$data_array['nick']) return array( 'estado' => 'error', 'data' => 'Falta el nick.' ); /* Falta el pass */ if(!$data_array['pass']) return array( 'estado' => 'error', 'data' => 'Falta la contraseña.' ); /* El mail es falso */ if(!user::es_mail($data_array['mail'])) return array( 'estado' => 'error', 'data' => 'La dirección de correo no es válido.' ); /* El usuario ya existe */ if(user::existe_dato($data_array['nick'], 'nick')) return array( 'estado' => 'error', 'data' => 'El nick ya existe.' ); /* El mail ya existe */ if(user::existe_dato($data_array['mail'], 'mail')) return array( 'estado' => 'error', 'data' => 'La dirección E-Mail \''.$data_array['mail'].'\' ya está siendo utilizada.' ); /* Los datos son correctos */ global $SYS; // Globaliza para el Handle de MySQL /* Hacemos la query y le decimos a la función que nos entregue el la primera columna solamente */ $id = mysql::selecciona(' select max(id) from usuarios ', $SYS['MYSQL']['HANDLE'], true); /* Si no hay usuarios entonces el id es 1 */ $id = ((int)$id['max(id)'] + 1); if(mysql_query(' INSERT INTO `foraneo`.`usuarios` ( `id` , `nick` , `nombre` , `pass` , `mail` , `token` , `data` , `fecha_acceso` ) VALUES ( \''.(int)$id.'\', \''.mysql_real_escape_string($data_array['nick']).'\', \''.mysql_real_escape_string($data_array['nombre']).'\', \''.mysql_real_escape_string(sha1($data_array['pass'])).'\', \''.mysql_real_escape_string($data_array['mail']).'\', \''.md5(microtime().rand(0,999)).'\', \'\', \''.time().'\' ); ', $SYS['MYSQL']['HANDLE'])) return array( 'estado' => 'ok', 'data' => 'La cuenta ha sido creada satisfactoriamente!' ); // Base de datos actualizada else return array( 'estado' => 'error', 'data' => 'Imposible crear tu cuenta. Contactate con el administrador.' ); // Imposible actualizar los datos }
function existe_dato($dato, $tipo){ global $SYS; $valor = mysql::selecciona(' select `'.mysql_real_escape_string($tipo).'` from usuarios where `'.mysql_real_escape_string($tipo).'` = \''.mysql_real_escape_string($dato).'\' limit 1 ', $SYS['MYSQL']['HANDLE'], true); if($valor[$tipo] == $dato) return true; // Existe else return false; // No existe }
function carga_sesion(){ global $SYS; if(!$data = unserialize($_COOKIE['user_data'])) return false; // La cookie no es válida ya que no contiene datos serializados $id = $data['id']; $pass = $data['pass']; unset($data); // Destruye la variable para ser reutilizada $data = mysql::selecciona(' select * from usuarios where id = \''.mysql_real_escape_string($id).'\' and pass = \''.mysql_real_escape_string($pass).'\' limit 1 ', $SYS['MYSQL']['HANDLE'], true); // Límite de 1 resultado if($data['id']){ /* Actualiza la fecha del último acceso */ mysql_query(' update `usuarios` SET `fecha_acceso` = \''.(int)time().'\' where `id` = 2 limit 1 ', $SYS['MYSQL']['HANDLE']); return $data; }else{ return false; } } function login($user, $pass){ global $SYS; $data = mysql::selecciona(' select * from usuarios where nick = \''.mysql_real_escape_string($user).'\' and pass = \''.mysql_real_escape_string(sha1($pass)).'\' limit 1 ', $SYS['MYSQL']['HANDLE'], true); // Límite de 1 resultado if(!$data['id']) return false; // No es un usuario válido o se produjo un intento de ataque /* Devuelve el pass cifrado en SHA1 al igual que la cookie */ /* Establece la cookie del usuario */ setcookie( 'user_data', serialize(array('id' => $data['id'], 'pass' => $data['pass'])), false, '/' ); // Compatibiliza con pernalinks return $data; // Retorna los datos del usuario } function es_mail($email){ /* Verifica atraves de la expresión regular si es correcto */ if(ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@+([_a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]{2,200}\.[a-zA-Z]{2,6}$", $email)){ $email = explode('@', $email); /* Verifica que el host del mail existe */ if(@gethostbynamel($email[1])) return true; else return false; }else{ return false; } } } ?> registrarse.php <?php /* Compatibilidad con acentos y eñes */ header('Content-Type: text/html; charset=iso-8859-1');
/* Declara la url del script Nunca declarar $_SERVER['PHP_SELF'] si no saben como utilizarlo ya que puede causar fallas de tipo XSS http://www.webcomparte.com/foro/programacion-en-php/evitar-el-cross-site-scripting-(xss)/ */ $SYS['WEB_SELF'] = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']; /* conexión a la base de datos */ include('mysql.php'); /* Función de usuarios */ include('usuarios.php');
if($_POST['nick']){ if($_POST['pass'] == $_POST['pass2']){ $estado = user::registrar($_POST); }else{ $estado = array( 'estado' => 'error', 'data' => 'Las contraseñas no coinciden.' ); } }
function muestra_input($variable){ global $estado; if($estado['estado'] == 'error') echo @htmlspecialchars($_POST[$variable], ENT_QUOTES); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//ES" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="es-CL" xml:lang="es"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>Registrarse</title> </head> <body> <?php if($estado['estado'] == 'error'){ ?> <strong>Se ha producido el siguiente error:</strong><br /> <?php echo htmlspecialchars($estado['data'], ENT_QUOTES); ?><br /> <br /> <?php }elseif($estado['estado'] == 'ok'){ ?> <strong><?php echo htmlspecialchars($estado['data'], ENT_QUOTES); ?></strong><br /> <br /> <?php } ?> Bievenido!, por favor ingrese sus datos.<br /> <br /> <form method="post" action="<?php echo $SYS['WEB_SELF']; ?>"> <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2"> <tbody> <tr> <td width="150">Nick</td> <td><input type="text" name="nick" value="<?php muestra_input('nick'); ?>" /></td> </tr> <tr> <td>Nombre completo</td> <td><input type="text" name="nombre" value="<?php muestra_input('nombre'); ?>" /></td> </tr> <tr> <td>Dirección E-Mail</td> <td><input type="text" name="mail" value="<?php muestra_input('mail'); ?>" /></td> </tr> <tr> <td>Contraseña</td> <td><input type="password" name="pass" /></td> </tr> <tr> <td>Repita su contraseña</td> <td><input type="password" name="pass2" /></td> </tr> <tr> <td></td> <td><input type="submit" value="Registrarse!" /></td> </tr> </tbody> </table> </body> </html> Me aparecen mis primeros errores en registrarse.php cuando lo ando intentando diciendo: Undefined index: nick in registrarse.php line 17 Undefined index: nick in estado.php line 41 Undefined index: estado in registrarse.php line 45 asi como esta intento crear el usuario... Deprecated: Function ereg() is deprecated in usuarios.php line 148
Warning: mysql_query() expects parameter 2 to be resource, boolean given in mysql.php on line 52
Warning: mysql_query() expects parameter 2 to be resource, boolean given in mysql.php on line 52
Warning: mysql_query() expects parameter 2 to be resource, boolean given in mysql.php on line 52
Warning: mysql_query() expects parameter 2 to be resource, boolean given in usuarios.php on line 69 Espero que me puedan ayudar soy muy nuevo en esto, pero si entiendo syntasis de php, jquery, mysql (poco pero entiendo...), y quisiera enverdad tengo la paciencia para aprender u.u! Asi tal cual lo copie, porque lo que quiero es que funcione primero y ya con eso empiezo a hacer el front-end del login
|
|
« Última modificación: 16 Abril 2012, 03:17 am por ¡Micronet! »
|
En línea
|
"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"
|
|
|
WHK
|
Verifica que hayas instalado la base de datos y hayas importado los valores, yo lo probé recién y funciona bién
|
|
|
En línea
|
|
|
|
¡Micronet!
Desconectado
Mensajes: 159
|
Verifica que hayas instalado la base de datos y hayas importado los valores, yo lo probé recién y funciona bién
Saludos mira ahorita ya logre hacer un inicio de sección pero estoy intentando comprobar la pagina panel.php si estan conectados o no estan conectados... lo que he estado intentar usar es esto: <?php include ("conexion.php");
//usuario y clave pasados por el formulario $user = $_SESSION["nick"]; $pass = $_SESSION["pass"]; //usa la funcion conexiones() que se ubica dentro de funciones.php if ($con){
} else { header('Location: login.php'); } ?> y tambien tengo un boton de cerrar sección que seria algo asi como este: <div id="apDiv23"> <input class="btn btn-large btn-danger" type="submit" name="btnD" value="Cerrar Session" onClick=" window.location.href='index.php'" />
<?php session_unset(); session_destroy(); ?> </div> el boton si me funciona lo que no me funciona es el intento de hacer la comprobacion de que si el usuario o no se encuentran conectados u.u y queria ver si me podrian ayudar mi archivo de conexion lo tengo de la siguiente manera: <?php session_start(); $conex = 0;
if ($conex == 0) { $servidorc = 'localhost'; $basec = 'foraneo'; $usuarioc = 'root'; $contrasenac = ''; };
if ($conex == 1) { $servidorc = "miservidorweb"; $usuarioc = "miusuarioweb"; $contrasenac = "micontraseñaweb"; $basec = "mibaseweb"; };
$con = mysql_connect($servidorc, $usuarioc, $contrasenac);
/* Hacemos condicion para saber si la conexion se ha realizado con exito */ if (!$con) { echo('No se puede conectar' . mysql_error()); //con esto "cachamos el error" para no caer abruptamente. } else { // echo " Se Conecto correctamente"; }
$db_selected = mysql_select_db($basec, $con); //Aqui ponemos como primer parametro el nombre de la bd y el segundo parametro ponemos el nombre de la variable en donde guardamos la conexión
if (!$db_selected) { die ("No puede conectarse a la base de datos : " . mysql_error());//con esto "cachamos el error" para no caer abruptamente. } else{ //echo "Se ha conectado correctamente a la base de datossssssssssssssss"; }
?>
me podrian ayudar porfavor :S y tambien intento cambiar la comprobacion de esta manera: <?php include ("conexion.php"); session_unset(); if ($con){ //usuario y clave pasados por el formulario $user = $_SESSION["nick"]; $pass = $_SESSION["pass"]; } else { header('Location: login.php'); } ?> pero me sale el siguiente error: Notice: Undefined index: nick in C:\wamp\www\Foraneo\panel.php on line 6 Notice: Undefined index: pass in C:\wamp\www\pagina\panel.php on line 7 ya se que estos errores me salen porque no se definen las variables, pero por lo mismo yo no quiero que entren al panel.php porque no se han iniciado sección... tambien si me pudieras decir como es que mantengo el inicio de sección activado... porque estaba intentando usar un checklist que dijiera recordar mi inicio de sección... pero no ce como hacerlo... porque lo que sucede esque cuando entro con mi inicio de sección... tengo problemas al momento de pasarme a otra pagina... y pierdo mi conexion... u.u y eso no quiero... :S
|
|
« Última modificación: 21 Abril 2012, 05:24 am por ¡Micronet! »
|
En línea
|
"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"
|
|
|
¡Micronet!
Desconectado
Mensajes: 159
|
Logre que funcionara asi: Si intento entrar al panel.php sin logearme me dirige al login.php donde tengo el formulario que muestro despues de esta explicacion. Estaba intentando mantener la sección activada hasta que el boton de cerrar sección que mantengo en panel.php que lo tengo configurado en un div. <div id="apDiv23"> <input class="btn btn-large btn-danger" type="submit" name="btnD" value="Cerrar Session" onClick=" window.location.href='index.php'" />
<?php session_unset(); session_destroy(); ?> </div> y presiento que es una de mis razones por las cuales no me mantiene mi inicio de sección y no ce que hacer :S Una vez mas estaba probando... con este formulario: <form action="loggin.php" method="post"> <label> <div align="left"> <p class="Estilo4"><br /> <span class="Estilo5">*</span> Usuario:</p> <p class="Estilo4"><br /> <input type="text" size="15" name="nick" onblur="this.id=''" title="Escribe tu usuario..." onkeypress="this.type='nick'" /> </p><br /> </div> </label> <p align="left"> <label><span class="Estilo4"><span class="Estilo5">* </span>Contraseña: <br /> <br /> <input type="password" size="15" name="pass" onkeypress="this.type='pass''password'" /> <br /> </span> <!--label class="checkbox" input type="checkbox" name="transporte" value="1">Recuerda mis datos /input> /label--> <br /> <input class="btn btn-large btn btn-info" type="submit" name="enviar" value="Iniciar Sesión" /> </label> </form> me dirige a la misma conexion.php y en panel.php tengo esta comprobacion: <?php include ("conexion.php"); if(!$_SESSION["nick"] || !$_SESSION["pass"]){//vemos si está declarada la variable, pero no en el index. header('Location: login.php'); }else{
$user = $_SESSION["nick"]; $pass = $_SESSION["pass"]; } ?> Y en login.php estaba intentando de que si ya se habia conectado que simplemente lo diriga al panel.php este no me funciona... :S porque creo que necesito trabajar con cookies <? include("conexion.php"); if(!$_SESSION["nick"] || !$_SESSION["pass"]){//vemos si está declarada la variable, pero no en el index. }else{ header('Location: panel.php'); } ?> entonces... intente modificar el de conexion de la siguiente manera: <?php
include("conexion.php");
//header("Location: index.php") $user=$_SESSION["nick"]=$_POST["nick"]; $pass=$_SESSION["pass"]=$_POST["pass"];
$sql="SELECT id FROM usuarios WHERE nick='".$_SESSION["nick"]."'and pass='".$_SESSION["pass"]."'";
$result=mysql_query($sql); $row=mysql_fetch_array($result);
if ($row){ setcookie('nick', $user, time() + 60 * 60 * 24 * 30); setcookie('pass', $pass, time() + 60 * 60 * 24 * 30); header("Location: panel.php");
}else{
header("Location: error.php"); }
?> e intentaba mis conexiones con: if ($_COOKIE['nick'] == "" || $_COOKIE['pass'] == "") y tampoco me salen :S crees que podrias ayudarme amigo :S
|
|
« Última modificación: 21 Abril 2012, 18:52 pm por ¡Micronet! »
|
En línea
|
"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"
|
|
|
|
|