Foros del Web » Programando para Internet » PHP »

¿Problemas con Cookies?

Estas en el tema de ¿Problemas con Cookies? en el foro de PHP en Foros del Web. Holas, estoy intentando que el sistema de logueo de usuarios de mi web sea el mismo que el de los foros que usare ( PunBB ...
  #1 (permalink)  
Antiguo 01/09/2006, 05:24
Avatar de kennyhp  
Fecha de Ingreso: julio-2006
Mensajes: 370
Antigüedad: 11 años, 5 meses
Puntos: 5
¿Problemas con Cookies?

Holas, estoy intentando que el sistema de logueo de usuarios de mi web sea el mismo que el de los foros que usare ( PunBB ), para no tener que loguear varias veces mientras se navegue. Aprovechando esto, quiero que solo los administradores entren en ciertas zonas de la web (diferentes a la de los foros).
He visto en la documentacion de punBB que permite la integración de la web con los foros de la siguiente forma: (link documentación)

Integrating PunBB into your website code is easy if you know a little PHP. By including PunBB's script common.php, you gain access to all PunBB global variables such as $db and $pun_user. However, in order to include this file, you need to define a constant called PUN_ROOT. This constant should be set to the relative path to your PunBB forum directory. For example, if your website front page is located in /home/user/public_html/ and your forums are located in /home/user/public_html/forums/, your PUN_ROOT should be './forums/'. The PHP code to accomplish this could look something like this:
define('PUN_ROOT', './forums/');require PUN_ROOT.'include/common.php';Once you've included common.php, you can access and utilize all of PunBB's global variables and functions.

Bien, pues en la página para controlar si un usuario esta logueado o no pongo esto: (lo he sacado de una página del foro dd es necesario estar logueado)
loguin.php :
Código PHP:
<?php
// CONTROLA EL LOGUEO DE LOS USUARIOS PARA ZONAS ADMINISTRATIVAS DE LA WEB
define('PUN_ADMIN_CONSOLE'1);
define ('PUN_ROOT''./../foro/');
require 
PUN_ROOT.'include/common.php';
require 
PUN_ROOT.'include/common_admin.php';
 
if (
$pun_user['g_id'] > PUN_ADMIN)
 
message($lang_common['No permission']);
 
?>
Y luego simplemente en las webs que quiero protegidas pongo:

Código PHP:
include ('loguin.php'); 
pero me da el siguiente error:

Fatal error: Cannot redeclare check_cookie() (previously declared in /usr/home/edificacionesglobal/www/dani/anait/foro/include/functions.php:28) in /usr/home/edificacionesglobal/www/dani/anait/foro/include/functions.php on line 97

El código de functions.php que falla es:
Código PHP:
//
// Cookie stuff!
//
function check_cookie(&$pun_user)
{
 global 
$db$pun_config$cookie_name$cookie_seed;
 
$now time();
 
$expire $now 31536000// The cookie expires after a year
 // We assume it's a guest
 
$cookie = array('user_id' => 1'password_hash' => 'Guest');
 
// If a cookie is set, we get the user_id and password hash from it
 
if (isset($_COOKIE[$cookie_name]))
  list(
$cookie['user_id'], $cookie['password_hash']) = @unserialize($_COOKIE[$cookie_name]);
 if (
$cookie['user_id'] > 1)
 {
  
// Check if there's a user with the user ID and password hash from the cookie
  
$result $db->query('SELECT u.*, g.*, o.logged, o.idle FROM '.$db->prefix.'users AS u INNER JOIN '.$db->prefix.'groups AS g ON u.group_id=g.g_id LEFT JOIN '.$db->prefix.'online AS o ON o.user_id=u.id WHERE u.id='.intval($cookie['user_id'])) or error('Unable to fetch user information'__FILE____LINE__$db->error());
  
$pun_user $db->fetch_assoc($result);
  
// If user authorisation failed
  
if (!isset($pun_user['id']) || md5($cookie_seed.$pun_user['password']) !== $cookie['password_hash'])
  {
   
pun_setcookie(0random_pass(8), $expire);
   
set_default_user();
   return;
  }
  
// Set a default language if the user selected language no longer exists
  
if ([email protected]file_exists(PUN_ROOT.'lang/'.$pun_user['language']))
   
$pun_user['language'] = $pun_config['o_default_lang'];
  
// Set a default style if the user selected style no longer exists
  
if ([email protected]file_exists(PUN_ROOT.'style/'.$pun_user['style'].'.css'))
   
$pun_user['style'] = $pun_config['o_default_style'];
  if (!
$pun_user['disp_topics'])
   
$pun_user['disp_topics'] = $pun_config['o_disp_topics_default'];
  if (!
$pun_user['disp_posts'])
   
$pun_user['disp_posts'] = $pun_config['o_disp_posts_default'];
  if (
$pun_user['save_pass'] == '0')
   
$expire 0;
  
// Define this if you want this visit to affect the online list and the users last visit data
  
if (!defined('PUN_QUIET_VISIT'))
  {
   
// Update the online list
   
if (!$pun_user['logged'])
    
$db->query('INSERT INTO '.$db->prefix.'online (user_id, ident, logged) VALUES('.$pun_user['id'].', \''.$db->escape($pun_user['username']).'\', '.$now.')') or error('Unable to insert into online list'__FILE____LINE__$db->error());
   else
   {
    
// Special case: We've timed out, but no other user has browsed the forums since we timed out
    
if ($pun_user['logged'] < ($now-$pun_config['o_timeout_visit']))
    {
     
$db->query('UPDATE '.$db->prefix.'users SET last_visit='.$pun_user['logged'].' WHERE id='.$pun_user['id']) or error('Unable to update user visit data'__FILE____LINE__$db->error());
     
$pun_user['last_visit'] = $pun_user['logged'];
    }
    
$idle_sql = ($pun_user['idle'] == '1') ? ', idle=0' '';
    
$db->query('UPDATE '.$db->prefix.'online SET logged='.$now.$idle_sql.' WHERE user_id='.$pun_user['id']) or error('Unable to update online list'__FILE____LINE__$db->error());
   }
  }
  
$pun_user['is_guest'] = false;
 }
 else
  
set_default_user();

Se que la integración se hace pq he creado una página dd muestra el nombre del usuario y eso lo hace bien... la verdad es que no se mucho aún de como funcionan las cookies y no tengo ni idea de por donde puede venir el error.

Un saludo y gracias
  #2 (permalink)  
Antiguo 01/09/2006, 10:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El problema que tienes no se refiere a "cookies" sino a una fución que está definida en un par de archivos que luego llamas por "include()" ..

Si usas "include_once()" enlugar de include() .. PHP "decide" si ya tiene "cargada" tal función o no auque se repita.

De todas formas tendrías que reivisar por qué está definida dos veces.


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 12:04.