Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: alexkof158 en 25 Noviembre 2009, 22:49 pm



Título: Problema con php Condicion de session
Publicado por: alexkof158 en 25 Noviembre 2009, 22:49 pm
hopla a todos, lo
lo que pasa es que quiero comparar q si el nombre de usuario == admin entonces que me muestre la pagina de admin, y si el nombre de usuario es == secretaria me muestre otra pagina. ahora estoy utilizando este codigo para leer el nombre de la sesion asi:
Código:
<?php
session_start();
?>

<?php
if (isset($_SESSION['k_username']='admin')) {
echo '<p><a href="index.php">Redirigir a la pagina Administrador</a></p>';
}
if (isset($_SESSION['k_username']='f')) {
echo '<p><a href="index2.php">Redirigir a la pagina Secretaria</a></p>';
}else {
echo "Error, no tienes permiso.";
echo '<p><a href="index.php">Necesita Loguearse</a></p>';
exit;
}
?>

pero me dice que el error esta en la linea 6 del codigo, y el tipo de error es
Parse error: syntax error, unexpected '=', expecting ',' or ')' in C:\wamp\www\tallerphp\validar_sesion.php on line 6

Gracias y espero prontas soluciones


Título: Re: Problema con php Condicion de session
Publicado por: Freeze. en 25 Noviembre 2009, 23:06 pm
No puedes agregar un valor a $_SESSION..
estas tratando de hacer 2 comprobaciones al mismo tiempo.
Primero fijate si la variable k_username está "seteada" con la función isset y luego si miras si tiene tal o cual valor.

Código
  1. <?php
  2. ?>
  3.  
  4. <?php
  5. if (isset($_SESSION)) {
  6.    if ($_SESSION['k_username']=='admin') {
  7. echo '<p><a href="index.php">Redirigir a la pagina Administrador</a></p>';
  8.    } elseif ($_SESSION['k_username']=='f') {
  9. echo '<p><a href="index2.php">Redirigir a la pagina Secretaria</a></p>';
  10.    }
  11. }
  12. echo "Error, no tienes permiso.";
  13. echo '<p><a href="index.php">Necesita Loguearse</a></p>';
  14. }
  15. ?>


Título: Re: Problema con php Condicion de session
Publicado por: cassiani en 25 Noviembre 2009, 23:21 pm
cabe acotar que el caracter '=' se uriliza solo para asignación y para condición un doble '=='.


Título: Re: Problema con php Condicion de session
Publicado por: Freeze. en 25 Noviembre 2009, 23:25 pm
Muy cierto ;)
Corrigiendo..


Título: Re: Problema con php Condicion de session
Publicado por: alexkof158 en 26 Noviembre 2009, 05:10 am
No puedes agregar un valor a $_SESSION..
estas tratando de hacer 2 comprobaciones al mismo tiempo.
Primero fijate si la variable k_username está "seteada" con la función isset y luego si miras si tiene tal o cual valor.

Código
  1. <?php
  2. ?>
  3.  
  4. <?php
  5. if (isset($_SESSION)) {
  6.    if ($_SESSION['k_username']=='admin') {
  7. echo '<p><a href="index.php">Redirigir a la pagina Administrador</a></p>';
  8.    } elseif ($_SESSION['k_username']=='f') {
  9. echo '<p><a href="index2.php">Redirigir a la pagina Secretaria</a></p>';
  10.    }
  11. }
  12. echo "Error, no tienes permiso.";
  13. echo '<p><a href="index.php">Necesita Loguearse</a></p>';
  14. }
  15. ?>

seteads?? :huh: :huh: :huh: :huh:
te refieres a esto
Código:
<?php
//session_start();
//datos para establecer la conexion con la base de mysql.
mysql_connect('localhost','root','')or die ('Ha fallado la conexión: '.mysql_error());
mysql_select_db('empresa')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
function quitar($mensaje)
{
$nopermitidos = array("'",'\\','<','>',"\"");
$mensaje = str_replace($nopermitidos, "", $mensaje);
return $mensaje;
}
if(trim($_POST["usuario"]) != "" && trim($_POST["password"]) != "")
{
// Puedes utilizar la funcion para eliminar algun caracter en especifico
//$usuario = strtolower(quitar($HTTP_POST_VARS["usuario"]));
//$password = $HTTP_POST_VARS["password"];
// o puedes convertir los a su entidad HTML aplicable con htmlentities
$usuario = strtolower(htmlentities($_POST["usuario"], ENT_QUOTES));
$password = $_POST["password"];
$result = mysql_query('SELECT password, usuario FROM usuarios WHERE usuario=\''.$usuario.'\'');
if($row = mysql_fetch_array($result)){
if($row["password"] == $password){
session_start();
$_SESSION["k_username"] = $row['usuario'];
echo 'Has sido logueado correctamente '.$_SESSION['k_username'].' <p>';
//echo '<a href="inicio.php">Index</a></p>';
header("location: inicio.php");

//Elimina el siguiente comentario si quieres que re-dirigir automáticamente a index.php
//Ingreso exitoso, ahora sera dirigido a la pagina principal.
/*<SCRIPT LANGUAGE="javascript">
location.href = "inicio.php";
</SCRIPT>*/
}else{
echo 'Password incorrecto';
}
}else{
echo 'Usuario no existente en la base de datos';
}
mysql_free_result($result);
}else{
echo 'Debe especificar un usuario y password';
}
mysql_close();
?>
porfa explicame..
graciass


Título: Re: Problema con php Condicion de session
Publicado por: cassiani en 26 Noviembre 2009, 05:52 am
lo que quiere decir es que primero haces una comparación y luego la otra y no como lo tenias.


Título: Re: Problema con php Condicion de session
Publicado por: alexkof158 en 26 Noviembre 2009, 07:18 am
lo que quiere decir es que primero haces una comparación y luego la otra y no como lo tenias.
vale listo, la condicion se efectua pero no redirecciona a la pagina de inicio creo que es porke no crea la session,  la pagina de inicio le hago un include_once("validar_sesion.php"); para que incluya a esta para que se pueda ver si esta la session creada, pero al parecer aun no esta creada... que hago mal?? :huh:
que estoy haciendo  mal??


Título: Re: Problema con php Condicion de session
Publicado por: [u]nsigned en 26 Noviembre 2009, 17:17 pm
Respondo apurado porque estoy en el trabajo... ;)

Esta línea está mal:
Código
  1. if($row = mysql_fetch_array($result)){

Debería ser:

Código
  1. while($row = mysql_fetch_array($result)){

Si alguien pusiera como user algo como ' OR 1=1' conseguiria acceso sin epecificar una contraseña (SQL Injection).


Código
  1. $_SESSION["k_username"] = $row['usuario'];
  2. echo 'Has sido logueado correctamente '.$_SESSION['k_username'].' <p>';
  3. //echo '<a href="inicio.php">Index</a></p>';
  4. header("location: inicio.php");

1.  session_start() debe usarse UNA SOLA VEZ, y debe ser la primera sentencia del script.
2. No podes usar header() si ya has mostrado algo en la pagina, es decir no podes usar un echo o printf antes de header.

Saludos


Título: Re: Problema con php Condicion de session
Publicado por: Castg! en 26 Noviembre 2009, 18:09 pm
yo tengo un porblema asi, lo que pasa es que no me setea la variable session, cuando llego a mi casa, (toy en el cole) subo el code que lo tengo enlocal host


Título: Re: Problema con php Condicion de session
Publicado por: [u]nsigned en 26 Noviembre 2009, 18:52 pm
Mira, si queres usar sesiones, y algun script externo que trabaje sobre estas (llamdo con include_once, include, requiere...)tenes que usar session_start(); dentro del script principal. Esta sentencia solo debe aparecer una vez, y solo en el script principal (no en los que se llamen mediante include o el metodo que sea..)

Por ejemplo supongamos que el script principal sea sesion.php, y tenemos un script llamdo sesion_check.php que tiene una rutina que comprueba la variable $_SESSION, es decir, que controla si esta definida, quevalor tiene, etc..un ejemplo sencillo de ambos script seria el siguiente:

sesion.php
Código
  1. <?php
  2. echo "A continuacion usare un script externo para trabajar con \$_SESSION<br />\n";
  3. include_once("sesion_check.php");
  4. ?>
  5.  

Y el script sesion_check.php seria este:

Código
  1. <?php
  2. if( isset($_SESSION['nombre']) )
  3. {
  4. echo "\$_SESSION['nombre']: ".$_SESSION['nombre'];
  5. }
  6. else
  7. {
  8. $_SESSION['nombre'] = "UNSIGNED";
  9. echo "\$_SESSION['nombre'] creada con valor ".$_SESSION['nombre'];
  10. }
  11. ?>

En este segundo (que usara como 'externo') no uso session_start(); ya que lo debo usar en el script principal(sesion.php).

En el script principal session_start(); debe solo usarse una vez, y de ser posible debe ser la primera linea, o el interprete de PHP nos dara un Warning:

Código
  1. <?php
  2. echo "xD"; //he agregado esta linea ANTES de session_start() para provocar un Warning
  3. echo "A continuacion usare un script externo para trabajar con \$_SESSION<br />\n";
  4. include_once("sesion_check.php");
  5. ?>

Citar
xD
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\AppServ\www\test\sesion.php:2) in C:\AppServ\www\test\sesion.php on line 3
A continuacion usare un script externo para trabajar con $_SESSION
$_SESSION['nombre']: UNSIGNED

Espero haber aclarado algunas dudas..

Saludos


Título: Re: Problema con php Condicion de session
Publicado por: Castg! en 27 Noviembre 2009, 01:35 am
mejor hago un nuevo tema para no romper las reglas xD!  http://foro.elhacker.net/php/problema_con_session-t275965.0.html (http://foro.elhacker.net/php/problema_con_session-t275965.0.html)


Título: Re: Problema con php Condicion de session
Publicado por: alexkof158 en 27 Noviembre 2009, 08:00 am
gracias todo solucionado, pero el
header("location: inicio.php");
este me pone problemas el navegador me dice q rechaza las conexiones..


Título: Re: Problema con php Condicion de session
Publicado por: Castg! en 27 Noviembre 2009, 17:28 pm
el problema es que ya imprimiste datos en pantalla, asi no podes poner un header, tenes que ponerlo alprincipio del codigo, pero no imprimirias nada, asi que imprimi y en vez de pone header ponelo en html con un "<META REFRESH


Título: Re: Problema con php Condicion de session
Publicado por: [u]nsigned en 27 Noviembre 2009, 18:34 pm
el problema es que ya imprimiste datos en pantalla, asi no podes poner un header, tenes que ponerlo alprincipio del codigo, pero no imprimirias nada, asi que imprimi y en vez de pone header ponelo en html con un "<META REFRESH

No es necesario que header() este al princio (eso es para session_start() para evitar Warnings), pero no podes printar nada en l aweb antes de usar un header().

Si tu codigo necesita usar un header en determinados lugares, lo que te recomiendo hacer es que no imprimas nada a vuelo, sino que gaurdes todo lo que quieras mostrar en tu web en una variable, y asi podes usar header("Location: loquesea.php") donde quieras, y por ultimo pasas a imprimir la variable.

saludos


Título: Re: Problema con php Condicion de session(Solucionado)
Publicado por: alexkof158 en 27 Noviembre 2009, 21:29 pm
el problema es que ya imprimiste datos en pantalla, asi no podes poner un header, tenes que ponerlo alprincipio del codigo, pero no imprimirias nada, asi que imprimi y en vez de pone header ponelo en html con un "<META REFRESH

No es necesario que header() este al princio (eso es para session_start() para evitar Warnings), pero no podes printar nada en l aweb antes de usar un header().

Si tu codigo necesita usar un header en determinados lugares, lo que te recomiendo hacer es que no imprimas nada a vuelo, sino que gaurdes todo lo que quieras mostrar en tu web en una variable, y asi podes usar header("Location: loquesea.php") donde quieras, y por ultimo pasas a imprimir la variable.

saludos
pues con metafresh no porke despues cada 2 segundo se actuliza la pagina que tengo y distrae la vista cliente.  mejor la dejo con un <a href>
y Gracias ya solucione mi probleba


Título: Re: Problema con php Condicion de session
Publicado por: [u]nsigned en 27 Noviembre 2009, 22:10 pm
Si todavia te interesa, luego de usar header("Location: ..."); tenes que usar exit();

Código
  1. header("Location: algo.php");
  2. exit();

Y asi te evitas cualquier error en la redireccion, como por ejemplo que no cambie la url en el navegador.

Esto se deberia hacer con el detectabot.php del foro, que luego de redirecionar al index.php no cambia la url en el navegador  :xD

saludos