Foros del Web » Programando para Internet » PHP »

Sesiones, que pasa?

Estas en el tema de Sesiones, que pasa? en el foro de PHP en Foros del Web. Hola, despues de haber leido mogollon de temas en el foro sobre las sesiones sigo sin poder resolver mi problema, por eso lo pongo aqui ...
  #1 (permalink)  
Antiguo 10/06/2008, 05:53
Avatar de elphaba  
Fecha de Ingreso: abril-2008
Ubicación: Ávila
Mensajes: 43
Antigüedad: 16 años
Puntos: 0
Sesiones, que pasa?

Hola, despues de haber leido mogollon de temas en el foro sobre las sesiones sigo sin poder resolver mi problema, por eso lo pongo aqui con la esperanza de que uds. me puedan ayudar.

aplicacion Cliente - servidor

1. (Cliente)Tengo una pagina que pide user y pass, llamada index.html
en ella pongo arriba del todo
<?php
session_start();
?>
despues el formulario para pedir los datos que dije.

2.los datos los envio via curl (mensaje xml)al servidor para comprobar si estan bien
y cuando los devuelve pues se supone que tiene que poder entrar a las demas paginas. Bien esto lo hace correcto sin hacer sesiones, pero claro yo quiero algo de seguridad en la aplicacion, mas que nada porque me lo pide el tutor del proyecto.

3 Ahora bien despues de comprobar el punto anterior debe entrar en una pagina que esta hecha de frameset se llama principal.php, la pongo

<?php
if (!isset($_SESSION) || empty($_SESSION)) {
session_start();
}
if(empty($_SESSION['usuario'])) {
header('Location: index.html');
exit;
}
?>

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

<head>

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

<meta name="description" content="página principal, aplicación" />


<link rel="stylesheet" type="text/css" href="1024px.css" title="1024px" media="screen,projection" />

<title>Modulo de Administración.</title>

</head>
<frameset frameborder=no cols="27%,*">
<frame name= "menu" src="menu1.php" scroling="auto">
<frameset frameborder=no rows="10%,*">
<frame name="titulo_cont" src="contenido1.php" scroling="auto">
<frame name="contenido" src="contenido2.php" scroling="auto">
</frameset>
</frameset>
</html>

en las paginas que hace mencion, contenio1, contenido2 y menu, no tengo nada puesto de session.

El problema es que cuando entro en index.html e introduzco los datos y sé que estan bien, no me entra en principal.php, sino que se queda en index.html
no se cual puede ser mi error, he dado mil vueltas al asunto y ya me estoy desesperando

Ayuda porfa!!!
  #2 (permalink)  
Antiguo 10/06/2008, 06:35
 
Fecha de Ingreso: junio-2008
Mensajes: 34
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Sesiones, que pasa?

Cita:
Iniciado por elphaba Ver Mensaje
Hola, despues de haber leido mogollon de temas en el foro sobre las sesiones sigo sin poder resolver mi problema, por eso lo pongo aqui con la esperanza de que uds. me puedan ayudar.

aplicacion Cliente - servidor

1. (Cliente)Tengo una pagina que pide user y pass, llamada index.html
en ella pongo arriba del todo
<?php
session_start();
?>
despues el formulario para pedir los datos que dije.
Así no te va a funcionar en la vida, eso de primeras y luego... ya respondi a eso en otro post (POR MOTIVOS DE ANTI-SPAM NO PUEDO PONER EL LINK AL POST, ASI QUE TE DEJO EL CODIGO.)


LOGIN.HTML
Código HTML:
<form name="formu" action="login.php" method="post">
<table bgcolor="#DADADA" border="0" cellpadding="1" cellspacing="1" align="center">
	<tr>
		<td bgcolor="#CCCCCC" align="center" colspan="2">
			<b>LOGIN</b>
		</td>
	</tr>
	<tr>
		<td align="right">
			<b>Usuario:</b>&nbsp;
		</td>
		<td align="left">
		<input type="text" maxlength="10" name="usu_form">&nbsp;
		</td>
	</tr>
	<tr>
		<td align="right">
			&nbsp;<b>Pasword:</b>&nbsp;
		</td>
		<td align="left">
		<input type="password" maxlength="10" name="pass_form">&nbsp;
		</td>
	</tr>
	<tr>
		<td colspan="2" align="center">
		<input type="submit" value="L O G I N">
		</td>
	</tr>
	<tr>
		<td align="center" colspan="2">
			&nbsp;¿No estas registrado? <a href="registro.html"><font color="#000000"><b>REGISTRATE</b></font></a>&nbsp;
		</td>
	</tr>
</form>
</table> 
LOGIN.PHP
Código HTML:
<?
# INICIAMOS LA SESSION
session_start();
session_name('permiso');
# NOS CONECTAMOS AL SERVIDOR
$conexion=mysql_connect("localhost","root","")
					or die("Error en la lina: ".__LINE__." de tu codigo.<br>El motivo del error es: ".mysql_error()."<br>En conclusion: No se ha podido conectar al servidor.");

# USAMOS LA BDD
$use = mysql_select_db("free",$conexion)
	or die("Error en la linea: ".__LINE__." de tu codigo.<br>El motivo del error es: ".mysql_error()."<br>En conclusion: No se ha podidos usar la BDD free.");	

# HACEMOS LA CONSULTA
$sql = "SELECT permiso, alias, passwd, permitido
		FROM usuario
		WHERE alias = '".$_POST['usu_form']."'";

$valores=mysql_query($sql)
	or die("Error en la linea: ".__LINE__." de tu codigo.<br>El motivo del error es: ".mysql_error()."<br>En conclusion: No se ha realizado la consulta");			

$registro=mysql_fetch_array($valores);

# COMPROBAMOS DATOS
$nick=$registro['alias'];
$passwd=$registro['passwd'];
$nick_form=$_POST['usu_form'];
$passwd_form=$_POST['pass_form'];
$permitido=$registro['permitido'];

# SESSION
$_SESSION["permiso_s"] = $registro['permiso'];

if ($nick_form==$nick && $passwd_form==$passwd){
	if ($_SESSION["permiso_s"]=="1"){
?>
	<script language="JavaScript">
		location.href="zona2.php";
	</script>
<?
}
	if ($_SESSION["permiso_s"]=="3"){
?>
	<script language="JavaScript">
		location.href="zona2.php";
	</script>
<?
}
	if ($_SESSION["permiso_s"]=="2" && $permitido=="2"){
?>
	<script language="JavaScript">
		alert('A espensas de permisos del administrador')
		location.href="home.html";
	</script>
<?
	}
	if ($_SESSION["permiso_s"]=="2"){
	?>
	<script language="JavaScript">
		location.href="zona.php";
	</script>
<?
	}
}
if ($nick_form!=$nick || $passwd_form!=$passwd){
session_destroy();
$url="Location:login.html";
header($url);	
?>
	<script language="JavaScript">
		location.href="login.html";
	</script>
<?
}
if ($nick_form=="" || $passwd_form==""){
?>
	<script language="JavaScript">
		location.href="login.html";
	</script>
<?
}
?> 
Por cierto, tambien te dejo el LOGOUT.PHP
Código HTML:
<?
session_start();
$_SESSION["permiso_s"];
$_SESSION=array();
session_destroy();
$url="Location:home.html";
header($url);
?> 
PD: Con el maxlength="10" no sirve la inyeccion SQL, ya que son 11 caracteres.


Espero que te sirva de ayuda.
Un saludo
  #3 (permalink)  
Antiguo 10/06/2008, 07:13
Avatar de Emirodgar  
Fecha de Ingreso: junio-2008
Mensajes: 1.255
Antigüedad: 15 años, 10 meses
Puntos: 121
Respuesta: Sesiones, que pasa?

Sinceramente creo que tienes un fallo de concepto del uso de sesiones, el index.html sólo debería ser un formulario donde recoger los datos de acceso para después pasárselos a un fichero .php que los validara y una vez hecho este proceso crear la sesión para que el usuario pudiera trabajar.

Lee algún manual de sesiones o utiliza muchas de las clases que existen para el control de usuarios.
  #4 (permalink)  
Antiguo 10/06/2008, 07:35
 
Fecha de Ingreso: junio-2008
Mensajes: 34
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Sesiones, que pasa?

Cita:
Iniciado por Emirodgar Ver Mensaje
Sinceramente creo que tienes un fallo de concepto del uso de sesiones, el index.html sólo debería ser un formulario donde recoger los datos de acceso para después pasárselos a un fichero .php que los validara y una vez hecho este proceso crear la sesión para que el usuario pudiera trabajar.

Lee algún manual de sesiones o utiliza muchas de las clases que existen para el control de usuarios.
Te veo puesto en el tema... xD ¿Como ves mi codigo? Siempre es bueno tener mas que tu propia opinion.

Un saludo
  #5 (permalink)  
Antiguo 10/06/2008, 08:59
Avatar de Emirodgar  
Fecha de Ingreso: junio-2008
Mensajes: 1.255
Antigüedad: 15 años, 10 meses
Puntos: 121
Respuesta: Sesiones, que pasa?

Sub7, la verdad es que no entiendo tu código, quizá con las prisas no lo copiaste bien aqui.

Cita:
1. (Cliente)Tengo una pagina que pide user y pass, llamada index.html
en ella pongo arriba del todo
<?php
session_start();
?>
No puedes ejecutar código php en una página con extensión .html

Cita:
<?php
if (!isset($_SESSION) || empty($_SESSION)) {
session_start();
}
if(empty($_SESSION['usuario'])) {
header('Location: index.html');
exit;
}
?>
Realmente no entiendo lo que quieres hacer aquí, si este código es reutilizado para varias cosas o no, de momento la primera vez que entra como no tiene sesión de ejecuta session_start() y al no tener definido un parámetro usuario para la sesión también se ejecuta el segundo if por lo que rediriges siempre la página al index.

De todas maneras sin ver todo el código ya te digo que es difícil entender muchas cosas, yo sinceramente, utilizaría clases ya creadas para estos menesteres, buena gana de reinventar la rueda ¿no?
  #6 (permalink)  
Antiguo 10/06/2008, 09:49
Avatar de elphaba  
Fecha de Ingreso: abril-2008
Ubicación: Ávila
Mensajes: 43
Antigüedad: 16 años
Puntos: 0
Respuesta: Sesiones, que pasa?

Cita:
De todas maneras sin ver todo el código ya te digo que es difícil entender muchas cosas, yo sinceramente, utilizaría clases ya creadas para estos menesteres, buena gana de reinventar la rueda ¿no?
A que clases te refieres?? me podrias decir algun manual que venga bien explicado?
gracias
  #7 (permalink)  
Antiguo 10/06/2008, 14:39
Avatar de Tombar  
Fecha de Ingreso: junio-2008
Ubicación: /home/tombar
Mensajes: 198
Antigüedad: 15 años, 10 meses
Puntos: 11
Respuesta: Sesiones, que pasa?

sub7 con respecto a lo que dices del maxlenght te evita injecciones SQL estas muy equivocado companero....

NUNCA debemos fiarnos del input de un usuario

te explico que pasa. supongamos que tu dices, con un maxlenght de 10 en los input me evito injecciones SQL, luego viene tito (un chaval muy cabron) y arma en su pc con ayuda de un notepad el siguiente codigo


Código HTML:
<form name="formu" action="login.php" method="post">
   <b>Usuario:</b><br/>
   <input type="text" maxlength="100[" name="usu_form"><br/>
   <br/>
   <b>Pasword:</b><br/>
   <input type="password" maxlength="100" name="pass_form"><br/>
   <br/>	
   <input type="submit" value="L O G I N">
</form> 
notese q los maxlenght dicen 100 ahora y el action del form es el mismo q el de tu aplicacion, x lo cual el desde su navegador abriendo una pagina local puede "POSTEAR" un usuario y una contrasena de 100 digitos cada una ahora y si hacer la injeccion sql.

ni hablar de que con firebug o algun otro plugin maravilloso para fiefox solamente tiene que editar el maxlenght de tu pagina para hacerlo y no tiene q escribir el formulario.

Queria aclarar esto x q es un error comun en el que cae mucha gente.

Sobre tu codigo PHP aun no lo he visto para opinar. Espero companero que no te tomes a mal mi comentario, yo solo quiero aportar un poco de lo que he aprendido.

:wq

Última edición por Tombar; 10/06/2008 a las 14:40 Razón: quedo un </table> colado ^^
  #8 (permalink)  
Antiguo 10/06/2008, 14:55
 
Fecha de Ingreso: junio-2008
Mensajes: 34
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Sesiones, que pasa?

Que va que va tio, todo lo contrario. Gracias por avisarme.
Aunque mi web no esta en la red, porque es un proyecto integrado (para culminacion del Grado Medio que estudio), para algun trabajo futuro que tenga que hacer lo tendre en cuenta.

Y eso que dices de los plugins de firefox... nunka me puesto a buscar info sobre eso la verda, no sabia de su existencia.

Y lo de cargar tu pagina local en el navegador... no habia caido, es muy simple pero nunca se me ocurrio.

De todas formas, Gracias tito :)
Un saludo.
  #9 (permalink)  
Antiguo 11/06/2008, 05:19
Avatar de elphaba  
Fecha de Ingreso: abril-2008
Ubicación: Ávila
Mensajes: 43
Antigüedad: 16 años
Puntos: 0
Respuesta: Sesiones, que pasa?

Hola
Simplemente daros las gracias a todos por vuestra ayuda

Ya lo he conseguido

Saludos
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 11:59.