Foros del Web » Programando para Internet » PHP »

necesito informacion para separar sesiones en php?

Estas en el tema de necesito informacion para separar sesiones en php? en el foro de PHP en Foros del Web. Hola tengo el siguiente problema con las sesiones: Antes de nada me explico un poco para ver si me entendeis, y si no me lo ...
  #1 (permalink)  
Antiguo 12/04/2012, 07:59
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 13 años, 3 meses
Puntos: 21
Pregunta necesito informacion para separar sesiones en php?

Hola tengo el siguiente problema con las sesiones:
Antes de nada me explico un poco para ver si me entendeis, y si no me lo preguntais por que tambien estoy aprendiendo jejeje.

Tengo un sistema desarrollado con un framework que es userCake y he modificado un poco el codigo para que el usuario pueda seleccionar el idioma en que quiera que se muestre la pagina.

---eso es una parte---

Si el usuario selecciona el idioma...., despues puede navegar en en el idioma seleccionado que se guarda en una sesion y no tiene que volver a seleccionarlo en otra pagina. Tambien esta la sesion del script cuando un usuario inicia sesion y guarda la sesion para poder navegar por las paginas que estan protegidas.

pero tengo error porque ahora no puedo iniciar sesion con usuario y contraseña, porque esta la sesion del idioma tambien y yo la verdad de sesiones no entiendo mucho.

me podriais hechar una mano indicandome, con manuales, ejemplos o que vosotros veais conveniente, para que yo tambien pueda aprender por favor?

gracias, espero que lo hayais entendido.

este es mi php si os interesa.

Código PHP:
<?php
    
/*
        UserCake Version: 1.4
        http://usercake.com
        
        Developed by: Adam Davis
    */
    
    
if(is_dir("install/"))
    {
        
header("Location: install/");
        die();
    }
    
    require_once(
"settings.php");

    
//Dbal Support - Thanks phpBB ; )
    
require_once("models/db/".$dbtype.".php");
    
    
//Construct a db instance
    
$db = new $sql_db();
    if(
is_array($db->sql_connect(
                            
$db_host
                            
$db_user,
                            
$db_pass,
                            
$db_name
                            
$db_port,
                            
false
                            
false
    
))) {
        die(
"Unable to connect to the database");
    }

session_start(); 
    if(!isset(
$_SESSION['lang'])) 
        
$_SESSION['lang']='es'
    if(isset(
$_GET['lg'])) 
        
$_SESSION['lang']=$_GET['lg']; 
    
$langauge $_SESSION['lang'];   
    require_once(
"lang/".$_SESSION['lang'].".php"); 
    
    require_once(
"lang/".$_SESSION['lang'].".php");
    require_once(
"class.user.php");
    require_once(
"class.mail.php");
    require_once(
"funcs.user.php");
    require_once(
"funcs.general.php");
    require_once(
"class.newuser.php");
    require_once(
"class.websitehttps.php");
    require_once(
"class.maintenance.php");
    require_once(
"class.usersonline.php");
    require_once(
"funcs.profile.php");
    
//require_once("class.usermessages.php");

    
session_start();
    
    
//Global User Object Var
    //loggedInUser can be used globally if constructed
    
if(isset($_SESSION["userCakeUser"]) && is_object($_SESSION["userCakeUser"]))
    {
        
$loggedInUser $_SESSION["userCakeUser"];
    }
    
    
//HTTP Strict Transport Security
    
$websiteHttpsSec = new websiteHttps();
    
$websiteHttpsSec->website_Https();
    
    
//now auto execute to show maintenance page
    //and only can access user with ip as defined
    
$Maintenance = new Maintenance();
    
$Maintenance->MaintenanceWebsite();
    
    
//View userCake users online
    
$viewUsersOnlineView = new usersOnlineView();
?>
  #2 (permalink)  
Antiguo 12/04/2012, 08:34
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
Respuesta: necesito informacion para separar sesiones en php?

A ver, al iniciar una session tú puedes guardar más de un dato en ella por así decirlo, por ejemplo, tú puedes iniciar una session y guardar $_SESSION['lang'] y $_SESSION['user'], si te fijas tiene la apariencia de un array.

Entonces, tu problema era que ahora no te dejaba iniciar un sesión al loguearte?
  #3 (permalink)  
Antiguo 12/04/2012, 08:48
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 13 años, 3 meses
Puntos: 21
Respuesta: necesito informacion para separar sesiones en php?

si, ahora puedo cambiar de idioma pero no puedo entrar en mi cuenta es como si me devolviera a la misma pagina sin mostrar errores ni mensajes.
  #4 (permalink)  
Antiguo 12/04/2012, 09:50
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 13 años, 3 meses
Puntos: 21
Respuesta: necesito informacion para separar sesiones en php?

ok, comentaste algo de una array, ¿se pueden meter sesiones dentro de una array? como porejemplo este code sacado del manual de php

Código PHP:
Ver original
  1. <?php
  2.     0 => 'haravikk',
  3.     'username' => 'haravikk',
  4.     1 => 'fish',
  5.     'password' => 'fish'
  6.     );
  7.    
  8. function storeSessionArray($array) {
  9.     foreach($array as $k => $v)
  10.         if (is_string($k)) $_SESSION[$k] = $v;
  11. }
  12. ?>

no habria problemas de sesiones como las que tengo ahora?
  #5 (permalink)  
Antiguo 12/04/2012, 09:59
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses
Puntos: 66
Respuesta: necesito informacion para separar sesiones en php?

Las sesiones las debes iniciar siempre al principio del script y en cada archivo que necesites hacer uso de variables de sesión.

Te he quitado un require_once repetido y un inicio de session_start() por mitad del script.


Corrige tu código por el de abajo, cierra el navegador para destruir la sesión y prueba de nuevo con el código corregido. Si la autentificación es correcta se debería inicializar la variable $_SESSION["userCakeUser"] aunque desconozco el método.

Código PHP:
<?php
    session_start
();
    
/*
        UserCake Version: 1.4
        http://usercake.com
        
        Developed by: Adam Davis
    */
    
    
if(is_dir("install/"))
    {
        
header("Location: install/");
        die();
    }
    
    require_once(
"settings.php");

    
//Dbal Support - Thanks phpBB ; )
    
require_once("models/db/".$dbtype.".php");
    
    
//Construct a db instance
    
$db = new $sql_db();
    if(
is_array($db->sql_connect(
                            
$db_host
                            
$db_user,
                            
$db_pass,
                            
$db_name
                            
$db_port,
                            
false
                            
false
    
))) {
        die(
"Unable to connect to the database");
    }
    if(!isset(
$_SESSION['lang'])) 
        
$_SESSION['lang']='es'
    if(isset(
$_GET['lg'])) 
        
$_SESSION['lang']=$_GET['lg']; 
    
$langauge $_SESSION['lang'];   
    
    require_once(
"lang/".$_SESSION['lang'].".php");
    require_once(
"class.user.php");
    require_once(
"class.mail.php");
    require_once(
"funcs.user.php");
    require_once(
"funcs.general.php");
    require_once(
"class.newuser.php");
    require_once(
"class.websitehttps.php");
    require_once(
"class.maintenance.php");
    require_once(
"class.usersonline.php");
    require_once(
"funcs.profile.php");
    
//require_once("class.usermessages.php");
    
    //Global User Object Var
    //loggedInUser can be used globally if constructed
    
if(isset($_SESSION["userCakeUser"]) && is_object($_SESSION["userCakeUser"]))
    {
        
$loggedInUser $_SESSION["userCakeUser"];
    }
    
    
//HTTP Strict Transport Security
    
$websiteHttpsSec = new websiteHttps();
    
$websiteHttpsSec->website_Https();
    
    
//now auto execute to show maintenance page
    //and only can access user with ip as defined
    
$Maintenance = new Maintenance();
    
$Maintenance->MaintenanceWebsite();
    
    
//View userCake users online
    
$viewUsersOnlineView = new usersOnlineView();
?>
__________________
Tu álbum de cromos online!!
  #6 (permalink)  
Antiguo 12/04/2012, 10:02
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
Respuesta: necesito informacion para separar sesiones en php?

Hombre, en ese código yo lo que veo es que el almacena unos datos en un array y despúes esos datos los guarda en la SESSION, pero no hace nada raro.
Lo que digo es que no hay ningún problema en tener másde una variable de session, como en tu caso no debería darte problemas por tener la variable del lenguaje y la variable del usuario. Puede que haya algun conflicto en tú código.
  #7 (permalink)  
Antiguo 12/04/2012, 10:03
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 20 años, 2 meses
Puntos: 71
Respuesta: necesito informacion para separar sesiones en php?

Tienes dos veces esta linea: require_once("lang/".$_SESSION['lang'].".php");
Por que llamas dos veces a session_start();
Modifica eso, y pruebas :)
  #8 (permalink)  
Antiguo 12/04/2012, 10:11
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
Respuesta: necesito informacion para separar sesiones en php?

También podrías pensar en cambiar por:

if(!isset($_SESSION)) session_start();
  #9 (permalink)  
Antiguo 12/04/2012, 10:13
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 13 años, 3 meses
Puntos: 21
Respuesta: necesito informacion para separar sesiones en php?

la parte repetida me he dado cuenta despues de postear, pero gracias por la reseña, entonces he puesto el session_start(); al principio del todo y solamente he dejado una, pero aun asi no funciona.

que puede estar pasando si en un principio, ya deberia de estar bien?

tambien me comentasteis, que tambien puede estar el fallo en mi codigo,
como que ya este definida la sesion y que se este redeclarando?
  #10 (permalink)  
Antiguo 12/04/2012, 10:18
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 20 años, 2 meses
Puntos: 71
Respuesta: necesito informacion para separar sesiones en php?

Ahora que miro con mas detenimiento el código, donde haces la asignación a $_SESSION["userCakeUser"]??? por que en ese código sale que la recuperas y comparas, pero no la asignación :?
  #11 (permalink)  
Antiguo 12/04/2012, 10:20
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses
Puntos: 66
Respuesta: necesito informacion para separar sesiones en php?

Intenta averiguar/seguir como se realiza el login y muestra el código que interviene en el proceso separado por el nombre del archivo al cual pertenece.
__________________
Tu álbum de cromos online!!
  #12 (permalink)  
Antiguo 12/04/2012, 10:39
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 13 años, 3 meses
Puntos: 21
Respuesta: necesito informacion para separar sesiones en php?

perdona, pero no sabria decirte donde hago un asignacion de la sesion, intento aprender todavia las sesiones y phpoo

los codigos que he rastreado

function isUserLoggedIn()



Código PHP:
Ver original
  1. function isUserLoggedIn() {
  2.     global $loggedInUser, $db, $db_table_prefix;
  3.  
  4.     if ($loggedInUser == NULL) { return false; }
  5.     else {
  6.         $sql = "SELECT User_ID,
  7.                Password
  8.                FROM " . $db_table_prefix . "Users
  9.                WHERE
  10.                User_ID = '" . $db->sql_escape($loggedInUser->user_id) . "'
  11.                AND
  12.                Password = '" . $db->sql_escape($loggedInUser->hash_pw) . "'
  13.                AND
  14.                Active = 1
  15.                LIMIT 1";
  16.  
  17.         //Query the database to ensure they haven't been removed or possibly banned?
  18.         if (returns_result($sql) > 0) { return true; }
  19.         else {
  20.             //No result returned kill the user session, user banned or deleted
  21.             $loggedInUser->userLogOut();
  22.  
  23.             return false;
  24.             }
  25.         }
  26.     }

function destorySession()

Código PHP:
Ver original
  1. function destorySession($name)
  2.     {
  3.         if(isset($_SESSION[$name]))
  4.         {
  5.             $_SESSION[$name] = NULL;
  6.            
  7.             unset($_SESSION[$name]);
  8.         }
  9.     }

function userLogOut()

Código PHP:
Ver original
  1. function userLogOut()
  2.     {
  3.         destorySession("userCakeUser");
  4.     }

y el login php

Código PHP:
Ver original
  1. if(!empty($_POST))
  2. {
  3.         $errors = array();
  4.         $username = trim($_POST["username"]);
  5.         $password = trim($_POST["password"]);
  6.    
  7.         //Perform some validation
  8.         //Feel free to edit / change as required
  9.         if($username == "")
  10.         {
  11.             $errors[] = lang("ACCOUNT_SPECIFY_USERNAME");
  12.         }
  13.         if($password == "")
  14.         {
  15.             $errors[] = lang("ACCOUNT_SPECIFY_PASSWORD");
  16.         }
  17.        
  18.         //End data validation
  19.         if(count($errors) == 0)
  20.         {
  21.             //A security note here, never tell the user which credential was incorrect
  22.             if(!usernameExists($username))
  23.             {
  24.                 $errors[] = lang("ACCOUNT_USER_OR_PASS_INVALID");
  25.             }
  26.             else
  27.             {
  28.                 $userdetails = fetchUserDetails($username);
  29.            
  30.                 //See if the user's account is activation
  31.                 if($userdetails["Active"]==0)
  32.                 {
  33.                     $errors[] = lang("ACCOUNT_INACTIVE");
  34.                 }
  35.                 else
  36.                 {
  37.                     //Hash the password and use the salt from the database to compare the password.
  38.                     $entered_pass = generateHash($password,$userdetails["Password"]);
  39.  
  40.                     if($entered_pass != $userdetails["Password"])
  41.                     {
  42.                         //Again, we know the password is at fault here, but lets not give away the combination incase of someone bruteforcing
  43.                         $errors[] = lang("ACCOUNT_USER_OR_PASS_INVALID");
  44.                     }
  45.                     else
  46.                     {
  47.                         //Passwords match! we're good to go'
  48.                        
  49.                         //Construct a new logged in user object
  50.                         //Transfer some db data to the session object
  51.                         $loggedInUser = new loggedInUser();
  52.                         $loggedInUser->email = $userdetails["Email"];
  53.                         $loggedInUser->user_id = $userdetails["User_ID"];
  54.                         $loggedInUser->hash_pw = $userdetails["Password"];
  55.                         $loggedInUser->display_username = $userdetails["Username"];
  56.                         $loggedInUser->clean_username = $userdetails["Username_Clean"];
  57.                        
  58.                         //Update last sign in
  59.                         $loggedInUser->updateLastSignIn();
  60.        
  61.                         $_SESSION["userCakeUser"] = $loggedInUser;
  62.                        
  63.                         //Redirect to user account page
  64.                         header("Location: account.php");
  65.                         die();
  66.                     }
  67.                 }
  68.             }
  69.         }
  70.     }
  71. ?>

alomejor ya se declara en el login php al introducir los datos y por eso hace conflicto.

Etiquetas: informacion, sesiones, sql, usuarios
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 13:32.