Como hacer inicio de sesion

Iniciado por ¡Micronet!, 13 Abril 2012, 06:56 AM

0 Miembros y 2 Visitantes están viendo este tema.

¡Micronet!

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  :huh: espero puedan ayudarme saludos :-(

"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.

¡Micronet!

#2
Cita de: WHK en 13 Abril 2012, 14:58 PM
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-php

http://www.youtube.com/watch?v=Ka6mb8BiEco

http://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 :)

"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"

WHK


Graphixx

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.
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

¡Micronet!

#5
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($queryMYSQL_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:

CitarUndefined 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...

CitarDeprecated: 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 :-(

"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

¡Micronet!

#7
Cita de: WHK en 16 Abril 2012, 20:08 PM
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

"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"

¡Micronet!

#8
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'$usertime() + 60 60 24 30);
setcookie('pass'$passtime() + 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

"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"