Foros del Web » Administración de Sistemas » Apache »

Login para ver la web

Estas en el tema de Login para ver la web en el foro de Apache en Foros del Web. Buenas... Antes de nada aclaro que lo que yo quiero no es un formulario php normal y corriente. Estoy preparando una web y hay varios ...
  #1 (permalink)  
Antiguo 06/10/2009, 07:07
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Login para ver la web

Buenas...

Antes de nada aclaro que lo que yo quiero no es un formulario php normal y corriente. Estoy preparando una web y hay varios usuarios que conocen la URL, no quiero que nadie entre a curiosear y lo que queria es poner un login tipo MYSQL, nada mas poner la URL te sale la ventanita del usuario y contraseña y si no lo pones bien, te manda a una pagina de error y si la pones bien, te deja entrar y ya no te vuelve a pedir que te logees mientras no cierres la pagina.

No se si esto es PHP. No quiero usar javascript...por que mirando el codigo fuente se podria saber la contraseña y tampoco estoy muy familiarizado con el JS.
  #2 (permalink)  
Antiguo 06/10/2009, 08:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Login para ver la web

Es lo mismo si usas un formulario normal (HTML) ya que el control de si esta loggeado o no lo tienes que hacer en el servidor usando sesiones.

Revisa en los aportes del foro hay ejemplos para hacer eso.

Saludos.
  #3 (permalink)  
Antiguo 06/10/2009, 10:14
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Login para ver la web

Como dije, no quiero formulario si no, la ventanita pidiendote user y pass o solo pass, un formulario en html si que se hacerlo.
  #4 (permalink)  
Antiguo 06/10/2009, 10:26
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Respuesta: Login para ver la web

Eso lo logras colocando un .htaccess en el root de tu servidor, que contenga:

AuthUserFile /ruta/absoluta/hacia/.htpasswd
AuthName AquiPuedesPonerLoQueQuieras
AuthType Basic

require user test123

luego crear un archivo .htpasswd y colocas ahi:
test123:12JvVkeJRgm8A

Donde test123 es el usuario y 12JvVkeJRgm8A es la contraseña encriptada, puedes crear un archivo .htpasswd aqui:
Código:
http://www.e2.u-net.com/htaccess/make.htm
Informacion mas detallada en:
Código:
www.cristalab.com/ tutoriales/ proteger-carpetas-con-.htaccess-y-.htpasswd-c213l/
Espero te sirva :)
  #5 (permalink)  
Antiguo 06/10/2009, 11:58
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Login para ver la web

Ahm, al subir el htaccess me sale esto

Cita:
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
Y no funciona nada hasta que quito los dos .ht
  #6 (permalink)  
Antiguo 06/10/2009, 13:02
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Respuesta: Login para ver la web

Lo mas seguro es ke el path del htpasswd este mal en el htaccess, revisa el log de errores de tu servidor para ver si es eso, y asegurate colocar bien el path del archivo en el servidor como por ejemplo:

/home/user/public/etc etc etc

Para saber el path, crea un archivo y usa esto:
Código PHP:
<?php
echo $_SERVER['DOCUMENT_ROOT'];
?>
Por seguridad, coloca el htpasswd fuera del folder publico :)

Última edición por JessicaTJ; 06/10/2009 a las 13:09
  #7 (permalink)  
Antiguo 06/10/2009, 13:24
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Login para ver la web

hola Vendetta, te recomendaria utilizar sessiones para administrar el acceso a los usuarios

index.php
Código php:
Ver original
  1. <?php
  2. session_start(); // iniciamos la session o la continuamos
  3. //incluimos las clases o un archivo de configuracion (recomendado)
  4.     include 'config.php';
  5.    
  6.     //creo el formulario para el logue, luego hago las comparaciones para ver si  lo muestro o no, mientras tanto lo mantengo en una variable
  7.     $formLogin = '  <form action="proceso.php" method="POST">
  8.                                 <label>Usuario</label>
  9.                                 <input type="text" name="login" class="form" />
  10.                                 <label>Password</label>
  11.                                 <input type="password" name="password" class="form" />
  12.                                 <input type="submit" value="Login" class="form" id="btn" />
  13.                     </form>';
  14.    
  15.     //hiciamos la pagina
  16.    
  17.     $html = '<html>
  18.                 <head>
  19.                     <title>ejemplo</title>
  20.                     <style>
  21.                         .signin {height:39px; background:#282828}
  22.                         .signin label, .signin .form {float:left;height:18px;}
  23.                         .signin label {padding:5px 10px;color:#FFF}
  24.                         .signin .form {margin-top:8px;margin-right:10px;background:#2B464D;border:solid 1px #172629;color:#FFF;text-align:right}
  25.                         .signin #btn {width:56px;height:27px;background:#476F27;border:none;padding:0 0 6px 0;font-size:12px;color:#FFF;margin:0;text-align:center}
  26.                     </style>
  27.                 </head>
  28.                 <body>';
  29.    
  30.     // comprobamos si el usuario esta logueado para ello utilizamos la global $usActual que la definimos en config.php
  31.     global $usActual;
  32.    
  33.     $html .='<div class="right"><div class="signin">';
  34.         if(!$usActual->isLogin()){
  35.             // si no esta logueado concatenamos el formulario
  36.             $html .= $formLogin;
  37.         }else{
  38.             $html .= '<label>bienvenido '.$usActual->getThisNombre().'</label>';
  39.             // vemos si pertenece al grupo administrador
  40.             if($usActual->getThisGrupo() == 'Admin'){
  41.                 $html .= '<label><a href="#">Panel</a></label>';
  42.             }
  43.             $html .= '<label><a href="proceso.php?accion=logout">Logout</a></label>';
  44.         }
  45.     $html .='</div></div>';
  46.    
  47.    
  48.     //mostramos la pagina
  49.    
  50.     echo $html;
  51. ?>


config.php
Código php:
Ver original
  1. <?php
  2.  
  3. //definimos las CONSTANTES para la conexion mysql
  4. define('DB_HOST','localhost');
  5. define('DB_USER','root');
  6. define('DB_PASS','');
  7. define('DB_NAME','login');
  8.  
  9. //incluimos las clases
  10. include 'class/odbcon.php';
  11. include 'class/class.usuarios.php';
  12.  
  13. //creamos los objetos globales, usActual y DbConn;
  14. global $DbConn;
  15. $DbConn = new DbConn(DB_HOST,DB_USER,DB_PASS);
  16. $DbConn -> connect();
  17. $DbConn -> selectDb(DB_NAME);
  18.  
  19. global $usActual;
  20. $usActual = new usuario();
  21.  
  22. ?>

proceso.php
Código php:
Ver original
  1. <?php
  2.  
  3. //incluimos el archivo de configuracion
  4. include 'config.php';
  5.  
  6.  
  7.  
  8. //lamamos a la global usActual para hacer las comprobaciones
  9.     global $usActual;
  10.    
  11.     $urlRedirect = 'ejemplo.php'; // url a donde redireccionamos
  12.  
  13.  
  14.         //si es esta definida la variable $_POST['login']
  15.             if($_POST['login']){
  16.                 // comrpobamos que el usuario y la contraseña sean correctas con la funcion usuario->login, que devolvera true si esta todo correcto, guardando la session
  17.                     if($usActual->login(array($_POST['login'],md5($_POST['password'])))){
  18.                                                
  19.                         echo '<b>Conexion exitosa. Redireccionando a '.$urlRedirect.'...</b>';
  20.                         echo '
  21.                                 <script>
  22.                                     // redireccionamos ne 3 segundos para que se logre ver el mensaje publuicado arriba
  23.                                     setTimeout("document.location.href=\''.$urlRedirect.'\'",3000);
  24.                                  </script>';
  25.                     }else{
  26.                         echo 'usuario o contraseña incorrecta, vuelva a intentarlo';
  27.                         echo '
  28.                             <script>
  29.                                 // redireccionamos ne 3 segundos para que se logre ver el mensaje publuicado arriba
  30.                                 setTimeout("document.location.href=\''.$urlRedirect.'\'",3000);
  31.                              </script>';
  32.                     }
  33.                    
  34.             }
  35.    
  36.     if($_GET['accion']=='logout'){
  37.         $usActual->logout();
  38.             echo '<b>Desconexion exitosa. Redireccionando a '.$urlRedirect.'...</b>';
  39.             echo '
  40.                     <script>
  41.                         // redireccionamos ne 3 segundos para que se logre ver el mensaje publuicado arriba
  42.                         setTimeout("document.location.href=\''.$urlRedirect.'\'",3000);
  43.                      </script>';
  44.     }
  45. ?>


clase usuarios
Código php:
Ver original
  1. <?php
  2. class usuario{
  3.         var $id=null;
  4.         var $init = null;
  5.         var $getInfo = false;
  6.         var $isLogin = false;
  7.         /**
  8.          * Constructor de la clase, necesaria para la comprabacion interna
  9.          * setea la variable $init para comprobar que la clase esta instanciada
  10.          * para acciones publicas no se requiere la variable
  11.          * @return Void
  12.          * @access public
  13.          * @static
  14.          */
  15.          
  16.         function usuario(){
  17.             $this->init = true;
  18.         }
  19.        
  20.         /**
  21.          * logea al Usuario, realiza una comprobacion devuelve true en caso de exito
  22.          * @param $loginInfo Array con los datos para el logueo
  23.          * @return Void    
  24.          * @access public
  25.          * @static
  26.          */
  27.         function login ($loginInfo){
  28.             if($this->init === true){
  29.                if($this->checkLogin($loginInfo)==true){
  30.                    $this->getInfo = true;
  31.                    $this->id = $this->getThisId($loginInfo);
  32.                    $this->getInfo = false;
  33.                    $this->isLogin = true;
  34.                    $_SESSION['login']=$this->id;
  35.                    return true;
  36.                }else{
  37.                  return false;
  38.                }
  39.             }else{
  40.                 return 'no se inicio variable';
  41.             }
  42.         }
  43.        
  44.        
  45.         /**
  46.          * Destruye la sesion
  47.          * @param $loginInfo Array con los datos para el logueo
  48.          * no se requiere instanciar la clase para desloguearse
  49.          * @return Void
  50.          * @access public
  51.          * @public
  52.          */
  53.         function logout(){
  54.             session_destroy();
  55.             $this->isLogin = false;
  56.         }
  57.        
  58.        
  59.        
  60.        
  61.        
  62.        
  63.          /*
  64.         *
  65.         * FUNCIONES para chequear informacion
  66.         *
  67.         *
  68.         * * */
  69.        
  70.        
  71.        
  72.        
  73.         /**
  74.          * Comprueba que exista el usuario y que coincida la contraseña
  75.          * en caso de exito devuelve true
  76.          * @param $loginInfo Array con los datos para el logueo
  77.          * @return Void
  78.          * @access public
  79.          * @static
  80.          */
  81.         function checkLogin($loginInfo){
  82.             if($this->init === true){
  83.                 global $DbConn;
  84.                     $user = mysql_real_escape_string($loginInfo[0]);
  85.                     $pass = md5(mysql_real_escape_string($loginInfo[1]));
  86.                     $sql = 'SELECT COUNT(id) as num FROM usuarios WHERE login="'.$user.'" AND password="'.$pass.'"';
  87.                     $dat = $DbConn->fetchArray($DbConn->query($sql));
  88.                     if ($dat['num'] == 1){
  89.                         return true;
  90.                     }
  91.                 return false;
  92.             }
  93.         }
  94.        
  95.        
  96.        
  97.         /*
  98.         *
  99.         * FUNCIONES para recuperar informacion
  100.         *
  101.         *
  102.         * * */
  103.        
  104.         /**
  105.          * Devuelve el id del usuario  comprueba si la variable getInfo es true
  106.          * @param $loginInfo Array se necesita el usuario
  107.          * @return Void
  108.          * @access public
  109.          * @static
  110.          */
  111.         function getThisId($loginInfo){
  112.               if($this->init === true){
  113.                   if($this->getInfo === true){
  114.                     global $DbConn;
  115.                         $user = mysql_real_escape_string($loginInfo[0]);
  116.                         $sql = 'SELECT id AS request FROM usuarios WHERE login = "'.$user.'"';
  117.                         $dat = $DbConn->fetchArray($DbConn->query($sql));
  118.                         return $dat['request'];
  119.                   }
  120.               }
  121.         }
  122.        
  123.         /**
  124.          * Devuelve el nombre del usuario  
  125.          * solamente si el usuario esta logueado
  126.          * @param $loginInfo Array se necesita el usuario
  127.          * @return Void
  128.          * @access public
  129.          * @static
  130.          */          
  131.         function getThisNombre(){
  132.            if($this->isLogin()){
  133.             $this->id = $_SESSION['login'];
  134.             if($this->id != null){
  135.                 global $DbConn;
  136.                     $sql = 'SELECT login AS request FROM usuarios WHERE id='.$this->id;
  137.                     $dat = $DbConn->fetchArray($DbConn->query($sql));
  138.                     return $dat['request'];
  139.             }
  140.            }
  141.         }
  142.        
  143.         /**
  144.          * Devuelve el nombre del grupo del usuario  
  145.          * solamente si el usuario esta logueado
  146.          * @param $loginInfo Array se necesita el usuario
  147.          * @return Void
  148.          * @access public
  149.          * @static
  150.          */          
  151.         function getThisGrupo(){
  152.             $this->id = $_SESSION['login'];
  153.             if($this->id != null){
  154.                 global $DbConn;
  155.                     $sql = 'SELECT grupo AS request
  156.                            FROM usuarios AS us
  157.                            LEFT JOIN grupos AS gr
  158.                            ON us.grupo_id = gr.id
  159.                            WHERE us.id = '. $this->id;
  160.                     $dat = $DbConn->fetchArray($DbConn->query($sql));
  161.                     return $dat['request'];
  162.             }
  163.         }                
  164.              
  165.        
  166.         function isLogin(){
  167.             if(isset($_SESSION['login'])){
  168.                 return true;
  169.             }
  170.             return false;  
  171.         }
  172.            
  173. } // <--------------------------- END CLASS ------------------------------>  
  174.    
  175.    
  176. ?>
  #8 (permalink)  
Antiguo 06/10/2009, 13:25
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Login para ver la web

clase de conexion a la base de datos http://www.forosdelweb.com/f68/aport...-datos-636057/

estructura para la base de datos

Código sql:
Ver original
  1. CREATE TABLE IF NOT EXISTS `usuarios` (
  2.   `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   `grupo_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  4.   `login` VARCHAR(45) NOT NULL DEFAULT '',
  5.   `password` VARCHAR(45) NOT NULL DEFAULT '',
  6.   PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
  8.  
  9.  
  10. CREATE TABLE IF NOT EXISTS `grupos` (
  11.   `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  12.   `grupo` VARCHAR(45) NOT NULL DEFAULT '',
  13.   PRIMARY KEY (`id`)
  14. ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
  #9 (permalink)  
Antiguo 06/10/2009, 13:46
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Login para ver la web

Nada, jessica, sigue diciendome lo mismo =\ El path habia puesto uno un tanto distinto pero de ese estilo (habia usado dirname en vez de $_SERVER) he cambiado de lugar el htpasswd pero sigue dandome el error 500 ._. Lo que tengo en el htaccess es esto:

Código:
AuthType Basic
AuthName "User y Pass"
AuthUserFile /home/user/.htpasswd
AuthPAM_Enabled off
<limit GET PUT POST>
require valid-user
</limit>
Como el que me habias dado no me funcionaba, busque por ahi a ver si habia algun otro y este tampoco funciona asi que bueno, por probar que no quede donde dice user, obviamente tengo el usuario solo que lo he quitado para que no lo sepa toodo el mundo XD


@Samu...creo que ni siquiera leiste mi post. Como dije, no quiero ningun formulario php ni gestion de usuarios, lo que quiero simplemente es entrar YO y nadie mas. No hacen falta tablas ni nada de eso, no hace falta tanto lio simplemente para 1 user que voy a utilizar temporalmente hasta que termine esto y pueda hacerlo publico...
  #10 (permalink)  
Antiguo 06/10/2009, 13:53
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Login para ver la web

eso no tiene importancia que solo quieras entrar vos y vos, no va a cambiar en nada que hagas para un solo usuario o para miles, aparte si sabes manejar formularios ya habrias podidio solucionar el problema con algo simple como lo que te mostre. Sino busca informacion sobre htacces antes de emepezar a dar directivas a apache que no comprendes
  #11 (permalink)  
Antiguo 06/10/2009, 13:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Login para ver la web

En ese caso porque posteas en PHP?

Te muevo al foro adecuado.
  #12 (permalink)  
Antiguo 06/10/2009, 13:56
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Login para ver la web

Código php:
Ver original
  1. <?php
  2. if($_SESSION['soyYo']=='minombre'){
  3.     muestro la pagina;
  4. }else{
  5.     pagina en construccion
  6. }
  #13 (permalink)  
Antiguo 06/10/2009, 16:05
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Login para ver la web

Cita:
Iniciado por samu22 Ver Mensaje
eso no tiene importancia que solo quieras entrar vos y vos, no va a cambiar en nada que hagas para un solo usuario o para miles, aparte si sabes manejar formularios ya habrias podidio solucionar el problema con algo simple como lo que te mostre. Sino busca informacion sobre htacces antes de emepezar a dar directivas a apache que no comprendes
El problema no lo puedo solucionar porque, por tercera vez NO quiero utilizar formularios ni sesiones, ni cokies ni nada de eso!!!!!
  #14 (permalink)  
Antiguo 06/10/2009, 17:42
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Login para ver la web

bueno entonces a leer...
  #15 (permalink)  
Antiguo 07/10/2009, 14:29
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Login para ver la web

Cita:
Iniciado por samu22 Ver Mensaje
bueno entonces a leer...
En fin, menuda ayuda.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:08.