Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/09/2006, 04:24
Avatar de kennyhp
kennyhp
 
Fecha de Ingreso: julio-2006
Mensajes: 370
Antigüedad: 17 años, 9 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 (!@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 (!@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