Foros del Web » Programando para Internet » PHP »

Lios con sesiones y CAPTCHA

Estas en el tema de Lios con sesiones y CAPTCHA en el foro de PHP en Foros del Web. Hola a todos ( y felices fiestas ), Estoy terminando un formualrio de registro en mi proyecto y quiero incorporar un captcha que enviará un ...
  #1 (permalink)  
Antiguo 27/12/2010, 03:29
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Lios con sesiones y CAPTCHA

Hola a todos ( y felices fiestas ),

Estoy terminando un formualrio de registro en mi proyecto y quiero incorporar un captcha que enviará un correo electrónico al usuario para completar el registro y asi evitar en lo posible los registros indeseados.
El captcha que estoy usando es el de securimage que parece ser bastante bueno, he adaptado el formulario inicial a mis requisitos para incluirlo en el mio (eliminando campos que ya tengo) pero tengo un problema con las sesiones ¿que raro no ?
Os adjunto los codigos del formulario:

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " 

http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd ">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">

   <meta http-equiv="Content-Type"content=" text/html;charset=utf-8">
  
<!--onsubmit="this.submit(); this.reset(); return false"> -->

<form method="post" action="../DBQuery/RegistroPersona.php" 

enctype="multipart/form-data">

      <form>
   	
	<!--Tabla Personas de la Base de datos-->  

       <fieldset>
        <legend>Datos Personales</legend>
        <label for="nombre">Nombre:</label><input type="text" name="nombre" 

id="nombre"size="40"/><br/><br/>
        <label for="apellido1">Apellido 1º:</label><input type="text" 

name="apellido1" id="apellido1"/>
        <label for="apellido2">Apellido 2º:</label><input type="text" 

name="apellido2" id="apellido2"/><br>
 	<label for="imagen">Foto:<input type="file" name="imagen" size="40"><br>   
      </fieldset>
      <fieldset>
        <legend>Contraseña</legend>
        <p>Indique aquí su usuario y su contraseña por favor. Guárdelos en un lugar 

que recuerde por si los olvida o los pierde</p>
       
        <label for="usuario">Usuario:</label><input type="text" name="usuario" 

id="usuario"/><br/>
        <label for="clave">Contraseña:</label><input type="password" name="clave" 

id="clave"/><br/>
        <label for="clave2">Por favor repita la contraseña:</label><input 

type="password" name="clave2" id="clave2"/><br/>
	<label for="preguntaClave">Pregunta secreta:</label><input type="text" 

name="preguntaClave" id="preguntaClave" size="80"/><br/><br/>
	<label for="respuestaClave">Respuesta secreta:</label><input type="text" 

name="respuestaClave" id="respuestaClave" size="80"/><br/><br/>
	<label for="mailPersona">Correo electrónico:</label><input type="text" 

name="mailPersona" id="mailPersona" size="80"/><br/><br/> 

</html>


<?php

// Captcha

	include_once('securimage/nmbscaptcha.php');

        /*Iniciamos sesion. Como no hay ninguna sesion iniciada, se crea, con un 

session_i alfanumérico aleatorio */

	session_start ();

	/*Se indican las variables de inicio de sesion*/

	session_register ($usuario,$clave);

		?>
		

 <html>
	<!-- Se crea un cammpo oculto para enviar la constante de sesion id -->


	<input type="hidden" name="<?php echo (session_name());?>" value="
</html>
<?php

 echo (session_id());?>">
 
		?> 
 <html>

	<!--Envio los datos--> 

       <input type="submit"value="Enviar" />
       <input type="reset"value="Borrar" />
      </fieldset>

	<!--Reseteo el Formulario--> 

       <body onload ="document.myform.reset()">

    </form>

 </html> 
El captcha modificado:

Código PHP:
<?php


/**
 * Project:     Securimage: A PHP class for creating and managing form CAPTCHA images<br />
 * File:        

securimage.php<br />
 * URL:         www.phpcaptcha.org
 */



session_start();  
// Start the session where the code will be stored.


?>

<html>

<body>





<?php

if (empty($_POST)) { ?>

<div style="width: 430px; float: left; height: 90px">
      
<img id="siimage" align="left" style="padding-right: 5px; border: 0" src="securimage_show.php?sid=

<?php 
echo md5(time()) ?>" />


        
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 

codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="19" height="19" 

id="SecurImage_as3" align="middle">
                
<param name="allowScriptAccess" value="sameDomain" />
                
<param name="allowFullScreen" value="false" />
                
<param name="movie" value="securimage_play.swf?

audio=securimage_play.php&bgColor1=#777&bgColor2=#fff&iconColor=#000&roundedCorner=5" />
                <param 

name="quality" value="high" />
            
                
<param name="bgcolor" value="#ffffff" />
                
<embed src="securimage_play.swf?audio=securimage_play.php&bgColor1=#777&bgColor2=#fff&iconColor=#000&roundedCorner=5" 

quality="high" bgcolor="#ffffff" width="19" height="19" name="SecurImage_as3" align="middle" 

allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" 

pluginspage="http://www.macromedia.com/go/getflashplayer" />
              
</object>

        
<br />
 
       
        
<!-- pass a session id to the query string of the script to prevent ie caching -->

        
<a tabindex="-1" style="border-style: none" href="#" title="Refresh Image" onclick="document.getElementById('siimage').src 

= 'securimage_show.php?sid=' + Math.random(); return false">
<img src="images/refresh.gif" alt="Reload Image" border="0" onclick="this.blur()" align="bottom" /></a>
</div>
<div 

style="clear: both">
</div>Código:<br />


<!-- NOTE: the "name" attribute is "code" so that $img->check($_POST['code']) will check the submitted form field -->


<form method="POST">
<input type="text" name="code" size="12" /><br /><br />


</form>

<?php


else { 
//form is posted
  
include("securimage.php");
  
$img = new Securimage();
  
$valid $img->check($_POST['code']);

  
if(
$valid == true) {
    echo 
"<center>Thanks, you entered the correct code.<br />Click <a href=\"{$_SERVER

['PHP_SELF']}\">here</a> to go back.</center>"
;
  } else {
    echo 
"<center>Sorry, the code you entered was invalid.  <a 

href=\"javascript:history.go(-1)\">Go back</a> to try again.</center>"
;
  }
}

?>

</body>
</html>
y el error que me devuelve todo ello:

Cita:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\rgs_gral_cons.php:4) in C:\xampp\htdocs\phpBits\BodyForm_Txt_RGTCon.php on line 43

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\rgs_gral_cons.php:4) in C:\xampp\htdocs\phpBits\BodyForm_Txt_RGTCon.php on line 43
?>
¿Alguien puede indicarme que es lo que estoy haciendo mal y darme una solución?
NO entiendo lo que me indica el error. De nuevo mi ignorancia ancestral.

Muchas gracias por adelantado y os deseo lo mejor para el próximo año (y el resto de viestra vida )

J.
  #2 (permalink)  
Antiguo 27/12/2010, 03:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Lios con sesiones y CAPTCHA

Cita:
Iniciado por Rankxerox1984 Ver Mensaje
¿Alguien puede indicarme que es lo que estoy haciendo mal y darme una solución?
NO entiendo lo que me indica el error. De nuevo mi ignorancia ancestral.
pues la solución ancestral es buscar en el foro antes de preguntar...

el error que obtienes es bastante común: simplemente debes iniciar la sesión al inicio de tus scripts, antes de cualquier tipo de salida... cosa que no estas haciendo!!

y de verdad, investiga pues existe suficiente información en el foro... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/12/2010, 08:27
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Lios con sesiones y CAPTCHA

Hola Pateketrueke:

Muchas gracias por tu rápida (y amable ) respuesta. Cuando dices al principio ¿a que te refieres con exactitud? me explico, como voy haciendo includes de unos escripts a otros no se si debo declarar las sesiones al inicio del script "principal" que va llamando los includes o, por el contrario, debo declarar la sesion en todos los scripts con independencia de si luego son llamados o no por otro mediante include.

Reiterando de nuevo mi agradecimiento por tus sabios consejos
Recibe un cordial saludo y mis mejores deseos para el próximo 2011

J.
  #4 (permalink)  
Antiguo 27/12/2010, 08:55
 
Fecha de Ingreso: diciembre-2009
Ubicación: La Paz - Bolivia
Mensajes: 67
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Lios con sesiones y CAPTCHA

Supongo que se referia a que debes colocarlo al principio de todos tu script donde inicia la sesion y deberias añadirle si no tiene algun tipo de control para, que determinado usuario pueda ver determinadas cosas

Última edición por otacon3784; 27/12/2010 a las 09:03
  #5 (permalink)  
Antiguo 28/12/2010, 08:28
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Lios con sesiones y CAPTCHA

Muchas gracias Otacon1784 ,

He hecho lo que sugieres. Pero tengo una duda con los header que no se como resolver. Me explico.
La estructura de mi proyecto utiliza includes para muchas funciones de manera que un include puede ser utilizado por varias paginas que tienen header distinto (...creo).
Entonces, se me ocurre que la solución quizás podría estar en utilizar un único script de sesion que invocaria mediante un require_once al principìo de cada página, para eso crearia una variable $head que contendria el valor del header de cada página y que se ria llamada desde el script de sesiones.
La pregunta, antes de meterme en el charco es
¿puede hacerse eso?

muchas gracias y un saludo de antemano

J.
  #6 (permalink)  
Antiguo 28/12/2010, 10:04
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: Lios con sesiones y CAPTCHA

buenas!!

no, de hecho si tienes por ejemplo un script llamado index, este seria que tenga el session_start(); como primera linea
algo similar a :

1.- <?php session_start();

ya despues de eso pones cualquier cantidad de includes que quieras... esta sobre entendido que un "include" o incluido quedara cubierto por el script que lo llama, entonces en ningun otro llevara el inicio de session, de lo contrario te enviara a error y por cierto... el mismo que ahora te da ;)

espero haberte ayudado

saludos!!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #7 (permalink)  
Antiguo 28/12/2010, 10:17
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Lios con sesiones y CAPTCHA

Muchas gracias por la aclaración AlconVigia

Entonces, entiendo que el session_start(); debe figurar únicamente en el inicio de cada pagina "principal" y no en los includes que son llamados por esta .
Por otra parte, lo único que deseo es registrar usuarios para que puedan acceder a determinadas partes de mi site, subir documentos y bajar documentos y cosas así. En principio, en esta web no está prevista ninguna tienda. Con lo que creo que con las variables de Login como variables de sesión seria suficiente ¿no?

Gracias de nuevo,

J.
  #8 (permalink)  
Antiguo 28/12/2010, 11:07
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: Lios con sesiones y CAPTCHA

Buenas!!

pues depende de tu proyecto si tienes que darles nivel de acceso o simplemente con que tengan registro.
lo unico que tendrias que hacer es poner al inicio de cada pagina que quieras restringir

Código PHP:
<?
session_start
();
if(!isset(
$_SESSION['login'])){
?>
 <BODY>
<center><h3>TE TIENES QUE IDENTIFICAR PARA ACCEDER A ESTA AREA</h3><br>
<meta http-equiv="Refresh" content="0;URL=index.php">
</BODY>
<?
} else { ?>
 <BODY>
<center><h3>AQUI PONES TODO LO QUE PUEDEN ACCEDAR AL ESTAR REGISTRADOS</h3>
</center>
</BODY>
<??>
espero haberte ayudado!!!!

un saludo!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #9 (permalink)  
Antiguo 29/12/2010, 03:06
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Lios con sesiones y CAPTCHA

Muchas gracias de nuevo HalconVigia,

me resulta de gran utilidad lo que indicas, entiendo que en la linea debajo de meta http deberia llamar al form de login mediante un javascript ¿no?.
Por cierto seguí tun indicaciones y han desaparecido los errores de sesión.

Gracias infinitas.

J.
  #10 (permalink)  
Antiguo 03/01/2011, 12:26
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Lios con sesiones y CAPTCHA resuelto

...Bueno, pues me costó pero al final lo maté .
Muchas gracias por la multiple ayuda recibida, la solución (por el momento) consiste en seguir las indicaciones de HalconVigia procurando que NO haya NINGUN espacio antes de la declaración de la sesión y guardar el archivo como UTF8 sin BOM

La cosa quedaria asi (por ejemplo):

Código:
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " 
http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd ">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
......
Reitero las gracias y doy el hilo/tema por terminado ¿Alguien sabe como terminar el tema?

J.

Etiquetas: captcha, sesiones
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 18:16.