problema con Cookies

Iniciado por gaby-EOF, 27 Octubre 2008, 06:34 AM

0 Miembros y 1 Visitante están viendo este tema.

gaby-EOF

tengo un problema al crear una Cookie y me tira el siguiente error

Warning: Cannot modify header information - headers already sent by (output started at /login.php:9)

este es el codigo

login.php
Código (php) [Seleccionar]
<form name=login action=login.php method=post>
Usuario: <input type=text name=user size=20><br>
contraseña: <input type=password name=pass size=20> <input type=submit name=entrar value=conectar>
</form>

<?php

$clave 
sha1("123456");

if(@
$_COOKIE[USER_COOKIE] == $clave)
{
   echo 
"Bienvenido";
   echo 
"<a href='paginaprivada.php'><br><br>Go to</a>";
}else{

if(@
$_REQUEST['entrar']=="conectar")
{

$user $_POST['user'];
$password $_POST['pass']; 

$passwordsha1 sha1($password);
 
if(
$passwordsha1 == $clave)
{  
   echo 
"Bienvenido $user";
   
setcookie(@USER_COOKIE,$passwordsha1time()+3600);
   echo 
"<a href='paginaprivada.php'><br><br>Go to</a>";
}else{
   echo 
"<br>Contraseña incorrecta</p>";
}

}
}
?>


el error solo me lo da en el web hosting ya lo probe localmente y funciona bien, tambien eh probado cambiandole nombre a la cookie y igual subi al hosting un blog que utilizaba cookies y no tira ningun error entonces me fije en el codigo de el blog y veo que hace como una estructura para la cookie y no entiendo muy bien el codigo de el blog alguien me prodria explicar algo al respecto.

este es el codigo de el blog que subi para probar y no tiene ningun problema

Código (php) [Seleccionar]
<?php

function cookie_setup() {

global 
$fp_config;

// md5(BLOG_BASEURL);

if ( !defined('COOKIEHASH') )
define('COOKIEHASH'$fp_config['general']['blogid']);

if ( !
defined('USER_COOKIE') )
        
define('USER_COOKIE''fpuser_'COOKIEHASH);
if ( !
defined('PASS_COOKIE') )
        
define('PASS_COOKIE''fppass_'COOKIEHASH);
if ( !
defined('SESS_COOKIE') )
        
define('SESS_COOKIE''fpsess_'COOKIEHASH);

if ( !
defined('COOKIEPATH') )
        
define('COOKIEPATH'preg_replace('|https?://[^/]+|i'''BLOG_BASEURL ) );
if ( !
defined('SITECOOKIEPATH') )
        
define('SITECOOKIEPATH'preg_replace('|https?://[^/]+|i'''BLOG_BASEURL ) );
if ( !
defined('COOKIE_DOMAIN') )
        
define('COOKIE_DOMAIN'false);
        

}

if ( !
function_exists('wp_get_cookie_login') ):
function 
wp_get_cookie_login() {
if ( empty($_COOKIE[USER_COOKIE]) || empty($_COOKIE[PASS_COOKIE]) )
return false;

return array('login' => $_COOKIE[USER_COOKIE], 'password' => $_COOKIE[PASS_COOKIE]);
}

endif;

function 
cookie_set($username$password$already_md5 false$home ''$siteurl ''$remember false) {
if ( !$already_md5 )
$password md5md5($password) ); // Double hash the password in the cookie.

if ( empty($home) )
$cookiepath COOKIEPATH;
else
$cookiepath preg_replace('|https?://[^/]+|i'''$home '/' );

if ( empty($siteurl) ) {
$sitecookiepath SITECOOKIEPATH;
$cookiehash COOKIEHASH;
} else {
$sitecookiepath preg_replace('|https?://[^/]+|i'''$siteurl '/' );
$cookiehash md5($siteurl);
}

if ( $remember )
$expire time() + 31536000;
else
$expire 0;

setcookie(USER_COOKIE$username$expire$cookiepathCOOKIE_DOMAIN);
setcookie(PASS_COOKIE$password$expire$cookiepathCOOKIE_DOMAIN);

if ( $cookiepath != $sitecookiepath ) {
setcookie(USER_COOKIE$username$expire$sitecookiepathCOOKIE_DOMAIN);
setcookie(PASS_COOKIE$password$expire$sitecookiepathCOOKIE_DOMAIN);
}
}

function 
cookie_clear() {
setcookie(USER_COOKIE' 'time() - 31536000COOKIEPATHCOOKIE_DOMAIN);
setcookie(PASS_COOKIE' 'time() - 31536000COOKIEPATHCOOKIE_DOMAIN);
setcookie(USER_COOKIE' 'time() - 31536000SITECOOKIEPATHCOOKIE_DOMAIN);
setcookie(PASS_COOKIE' 'time() - 31536000SITECOOKIEPATHCOOKIE_DOMAIN);
}


if ( !
function_exists('wp_login') ) :
function 
wp_login($username$password$already_md5 false) {
global $wpdb$error;

$username sanitize_user($username);

if ( '' == $username )
return false;

if ( '' == $password ) {
$error __('<strong>ERROR</strong>: The password field is empty.');
return false;
}

$login get_userdatabylogin($username);
//$login = $wpdb->get_row("SELECT ID, user_login, user_pass FROM $wpdb->users WHERE user_login = '$username'");

if (!$login) {
$error __('<strong>ERROR</strong>: Invalid username.');
return false;
} else {
// If the password is already_md5, it has been double hashed.
// Otherwise, it is plain text.
if ( ($already_md5 && md5($login->user_pass) == $password) || ($login->user_login == $username && $login->user_pass == md5($password)) ) {
return true;
} else {
$error __('<strong>ERROR</strong>: Incorrect password.');
$pwd '';
return false;
}
}
}
endif;

if ( !
function_exists('is_user_logged_in') ) :
function 
is_user_logged_in() {
$user wp_get_current_user();

if ( $user->id == )
return false;

return true;
}
endif;

if ( !
function_exists('auth_redirect') ) :
function 
auth_redirect() {
// Checks if a user is logged in, if not redirects them to the login page
if ( (!empty($_COOKIE[USER_COOKIE]) &&
!wp_login($_COOKIE[USER_COOKIE], $_COOKIE[PASS_COOKIE], true)) ||
 (empty($_COOKIE[USER_COOKIE])) ) {
nocache_headers();

wp_redirect(get_option('siteurl') . '/wp-login.php?redirect_to=' urlencode($_SERVER['REQUEST_URI']));
exit();
}
}
endif;


?>


espero me ayuden.
---------------->off line

дٳŦ٭

Citarsetcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including <html> and <head> tags as well as any whitespace.

Pon tu html después de mandar la cookie...

http://www.php.net/setcookie

Suerte


Con sangre andaluza :)


gaby-EOF

no funciona me sigue dando el mismo error

alguien puede ayudarme ?
---------------->off line

WHK

Cuando estableces una cookie esta debe ser enviada mientras la cabezera se está enviando (header), después de esto comienza a aparecer la web y ya no puedes establecer ninguna cookie hasta la próxima carga.

El problema está en que intentas establecer una cookie justo después que ya enviaste el header.

Fijate que aparece antes de ese mensaje de error. Lo que si puedes hacer es jugar con $_SESSION[] ya que puedes almacenar datos dentro del servidor identificandose con su cookie y no es necesario enviar una cabecera cada ves que deseas modificar su contenido.

gaby-EOF

gracias me funciono lo de $_SESSION[]  ;D

saludos
---------------->off line