Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: ¡Micronet! en 22 Abril 2012, 05:20 am



Título: Problemas con verificacion de inicio de session (PHP)
Publicado por: ¡Micronet! en 22 Abril 2012, 05:20 am
Tengo siguientes clausualas de php en su correspondiente archivo:

login.php  (Donde ingresan sus datos por medio de un formulario... pero para eso antes verifican si esta conectado o no)
Código:
<?php 
session_start();
if(isset($_SESSION["nick"]) && isset($_SESSION["pass"])){
    header("Location: panel.php");
}else
{

}
?>

index.php (en la parte de menu principal donde me aparece el nombre del usuario)
Código:
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><?php 
session_start();
if(isset($_SESSION["conectado"])){
   echo  "Bienvenido: ";
echo "<a href=panel.php>";
echo  $_SESSION["nick"];} else{
echo " ";
session_destroy();
}
?></b></li>

Formulario de index.php (como uso el formulario para enviar)
Código:
<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>

loggin.php (Como verifica el inicio de session si existe o no)
Código:
<?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){
header("Location: panel.php");

}else{

header("Location: error.php");
}


?>

panel.php (En donde se encuentra el panel del administrador)
Código:
<?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"];
}
?>

error.php (En caso de que la contraseña se encuentren incorrectos)
Código:
<?php 
session_start();
if(isset($_SESSION["nick"]) && isset($_SESSION["pass"])){
    header("Location: panel.php");
}else
{

}
?>



No existen problemas con (Cuando no hago ningun intento de inicio de sesion):

*Cuando intento entrar a panel.php no me deja entrar y me redirecciona a login.php donde se encuentra el formulario para iniciar sesion

*Cuando estoy en index.php no me aparece ningun error y me comprueba que no existe ninguna conexion alguna

Problemas que quiero solucionar (Cuando hago un inicio de sesion fallido osea que no existe el usuario ni contraseña):

*En index.php me aparece el Bienvenido: "usuario que no existe"

*Cuando le doy click cuando solo me escribe el nombre me aparece: La página no se está redireccionando apropiadamente. Firefox detectó que el servidor está redirigiendo la solicitud para esta dirección en un modo que nunca se completará. Este problema puede estar pasando por haber deshabilitado las cookies.  Esto es porque en el momento que la pagina lo envia a error.php este porque agarra los valores del formulario apesar de que sean incorrectos los toma como correctos lo que quiero es que tome los valores que realmente existen en mi base de datos

*Cuando le quito el ciclo para evitar el error de arriba, me toma el valor que le di en el formulario apesar de que el usuario ni si quiera exista, cuando lo que quiero es evitar eso, por que si ando en index.php este me aparece el mensaje de bienvenido "nombre de usuario inexistente" y me deja entrar al panel cuando no quiero que suceda esto.

Mi conexion es la siguiente:
conexion.php
Código:
<?php
session_start();
$conex = 0;

if ($conex == 0) {
$servidorc = 'localhost';
$basec = 'foraneo';
$usuarioc = 'root';
$contrasenac = '';
};


if ($conex == 1) {
    $servidorc = "localhost";
    $usuarioc = "usuario";
    $contrasenac = "contraseña";
    $basec = "base";
};

    $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";
}

?>


Título: Re: Problemas con verificacion de inicio de session (PHP)
Publicado por: engel lex en 29 Abril 2012, 04:11 am
no entendi mucho XD el post es como que un poco largo y se me hizo un pelo dificl entender el problema...

pero 1 en loggin primero chequea si existen con isset a los posts, te recomiendo nunca usar directamente las variables de usr y pass sobre la base de datos XD es la forma mas facil para inyectar codigo XD

pide solo el usuario, y en vez de ver si $row existe comprueba si para ese usuario esa contraseña es correcta, tambien podrias dar echo a mysql_error() para ver si hubo un error en la db

si no te sirve, sintetiza el error en una idea clara XD y vuelvo a revisar a ver si te puedo ayudar