Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Error con $_SESSION

Estas en el tema de Error con $_SESSION en el foro de PHP en Foros del Web. Hola amigos tal ves no lo vea el error pero estoy recibiendo el siguiente error: Cita: Notice: Undefined variable: _SESSION in C:\xampp\htdocs\icarosnet\phpcore\class.language.p hp on line ...
  #1 (permalink)  
Antiguo 02/07/2014, 18:00
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Pregunta Error con $_SESSION

Hola amigos tal ves no lo vea el error pero estoy recibiendo el siguiente error:


Cita:
Notice: Undefined variable: _SESSION in C:\xampp\htdocs\icarosnet\phpcore\class.language.p hp on line 46
dentro de la clase: class.language tengo una funcion:

Código PHP:
Ver original
  1. function setLanguage($userLang){
  2.        
  3.         if(isset($_SESSION['lang'])){
  4.         }else{
  5.             $deteclang = $_SESSION['deteclang']; // envia el error linea 46
  6.             if(isset($userLang)){
  7.                 if($userLang=='es'){ $langfile = 'es.inc.php'; }
  8.                 if($userLang=='en'){ $langfile = 'en.inc.php'; }
  9.                 if($userLang=='pt'){ $langfile = 'pt.inc.php'; }
  10.                 if($userLang=='fr'){ $langfile = 'fr.inc.php'; }
  11.                 $_SESSION['deteclang']  =$deteclang;
  12.                 $_SESSION["lang"]       =$langfile;
  13.             }else{
  14.                 $lang=$deteclang;
  15.                 if($lang=='es'){ $langfile = 'es.inc.php'; }
  16.                 if($lang=='en'){ $langfile = 'en.inc.php'; }
  17.                 if($lang=='pt'){ $langfile = 'pt.inc.php'; }
  18.                 if($lang=='fr'){ $langfile = 'fr.inc.php'; }
  19.                 $_SESSION['deteclang']  =$deteclang;
  20.                 $_SESSION["lang"]       =$langfile;
  21.             }
  22.         }
  23.     }
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #2 (permalink)  
Antiguo 02/07/2014, 18:21
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Eror con $_SESSION

Pues supondría que la variable de sesión no existe, cuando haces

$deteclang = $_SESSION['deteclang']; // envia el error linea 46

estás asumiendo que $_SESSION y $_SESSION['deteclang'] existen, pero podría ser que no, aunque esto debería venir desde antes en otro código.
  #3 (permalink)  
Antiguo 02/07/2014, 18:51
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Respuesta: Eror con $_SESSION

Repondiendo a eso de declarar tengo una clase que inicialisa la sesion en cada pagina:

Código PHP:
Ver original
  1. <?php
  2. class Session{
  3.     function iniciarSession(){
  4.         session_name('NombredeSession');
  5.         session_start();
  6.         // Turn on all error reporting
  7.         error_reporting(E_ALL);
  8.     }
  9. }
  10. ?>

y yo la llamo de la siguiente forma:


Código PHP:
Ver original
  1. require_once("class.session.php");
  2. $sesion =   new Session();
  3. $sesion -> iniciarSession();//iniciamos sesion
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #4 (permalink)  
Antiguo 02/07/2014, 19:00
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Respuesta: Eror con $_SESSION

ya detecte el primer warning y lo he limpiado al parecer era un problema de orden ya que quería poner todos los require primero y en algunos se ejecutan las cosas automáticamente y no cumplía con la lógica y el orden pero ahora tengo otros inconvenientes:

Cita:
Notice: Undefined variable: langfile in C:\xampp\htdocs\phpcore\class.language.php on line 62

Notice: Undefined variable: langfile in C:\xampp\htdocs\phpcore\class.language.php on line 64

Warning: include_once(/lang/.conf): failed to open stream: No such file or directory in C:\xampp\htdocs\phpcore\class.language.php on line 38

Warning: include_once(): Failed opening '/lang/.conf' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\phpcore\class.language.php on line 38

Código PHP:
Ver original
  1. <?php
  2. class Language{
  3.     function detectLanguage() {
  4.         /*if(empty($_SESSION['deteclang'])){
  5.             $lang=substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2);
  6.             $_SESSION['deteclang']=$lang;
  7.             return $_SESSION['deteclang'];*/
  8.  
  9.             global $DEFAULT_LANGUAGE;
  10.             if ($_SERVER['HTTP_ACCEPT_LANGUAGE']) {
  11.                 $this->languages = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  12.                 $this->language = substr($this->languages,0,2);
  13.                 return $this->language;
  14.             }
  15.             else if ($_SERVER['HTTP_USER_AGENT']) {
  16.                 $this->user_agent = explode(";" , $_SERVER['HTTP_USER_AGENT']);
  17.  
  18.                 for ($i=0; $i < sizeof($this->user_agent); $i++) {
  19.                     $this->languages = explode("-",$this->user_agent[$i]);
  20.                     if (sizeof($this->languages) == 2) {
  21.                         if (strlen(trim($this->languages[0])) == 2) {
  22.                             $size = sizeof($this->language);
  23.                             $this->language[$size]=trim($this->languages[0]);
  24.                         }
  25.                     }
  26.                 }
  27.                 return $this->language[0];
  28.             }
  29.             else {
  30.                 $this->language = $DEFAULT_LANGUAGE;
  31.                 return $this->language;
  32.             }
  33.    
  34.         }
  35.     function getLanguage($language = null) {
  36.             global $LANGUAGE_DIR;
  37.             $lang = $this->setLanguage($language);
  38.             include_once $LANGUAGE_DIR."/".$lang.".conf"; //linea 38
  39.             return $language = $lang;
  40.         }
  41.     function setLanguage($userLang){
  42.         echo"$userLang";
  43.         if(isset($_SESSION['lang'])){
  44.         }else{
  45.             $deteclang = $_SESSION['deteclang'];
  46.             if(isset($userLang)){
  47.                 if($userLang=='es'){ $langfile = 'es.inc.php'; }
  48.                 if($userLang=='en'){ $langfile = 'en.inc.php'; }
  49.                 if($userLang=='pt'){ $langfile = 'pt.inc.php'; }
  50.                 if($userLang=='fr'){ $langfile = 'fr.inc.php'; }
  51.                 echo $lang;
  52.                 echo $langfile;
  53.                 $_SESSION['deteclang']  =$deteclang;
  54.                 $_SESSION["lang"]       =$langfile;
  55.             }else{
  56.                 $lang=$deteclang;
  57.                 if($lang=='es'){ $langfile = 'es.inc.php'; }
  58.                 if($lang=='en'){ $langfile = 'en.inc.php'; }
  59.                 if($lang=='pt'){ $langfile = 'pt.inc.php'; }
  60.                 if($lang=='fr'){ $langfile = 'fr.inc.php'; }
  61.                 echo $lang;
  62.                 echo $langfile;   // linea 62
  63.                 $_SESSION['deteclang']  =$deteclang;
  64.                 $_SESSION["lang"]       =$langfile;   //linea 64
  65.             }
  66.         }
  67.     }
  68.     function cargaLanguage(){
  69.         $lang = $_SESSION["lang"];
  70.         $directorio = './lang/';
  71.         $pathfile = $directorio.$lang;
  72.         include_once ($pathfile);
  73.         return $langArray;
  74.     }
  75. }
  76. ?>


no se por donde devorar esto, lo que mas me molesta es el Notice
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #5 (permalink)  
Antiguo 02/07/2014, 19:47
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Eror con $_SESSION

session_start() debe estar al comienzo del script y no dentro de ninguna funcion o metodo

Habia posteado algo pero mi mensaje desapareció
__________________
Salu2!
  #6 (permalink)  
Antiguo 02/07/2014, 20:29
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Respuesta: Eror con $_SESSION

Disculpa si dudo de lo que argumentas pero por que dices que no puede estar session_start() dentro de alguna funcion o script, que yo entienda después que su llamada este al inicio del código no debe haber ningún problema:

index.php
Código PHP:
Ver original
  1. /*incluciones de codigo del core php y las clases mediate uso de constantes*/
  2. require_once("config/index.config.php");
  3.  
  4. //instanciamos las clases
  5. $sesion     =   new Session();
  6. $language   =   new Language();
  7.  
  8.  
  9.  
  10. $sesion ->  iniciarSession();//iniciamos sesion
  11. $lang = $language->getLanguage(@$_POST['lang']);//obtenemos lenguaje y actualisamos

config/index.config.php

Código PHP:
Ver original
  1. <?php
  2.     //Directorio del nucleo de PHP
  3.     $APP_PHPCORE_DIR=$_SERVER['DOCUMENT_ROOT'] . '/phpcore';
  4.     //Lenguaje por defecto
  5.     $DEFAULT_LANGUAGE = 'es';
  6.     $LANGUAGE_DIR='/lang';
  7.     //Cargamos todos los archivos del núcleo php que se utilizaran
  8.     require_once $APP_PHPCORE_DIR . '/' . 'class.constants.php';
  9.     require_once $APP_PHPCORE_DIR . '/' . SESSION_CLASS;
  10.     require_once $APP_PHPCORE_DIR . '/' . LANGUAGE_CLASS;
  11.     require_once $APP_PHPCORE_DIR . '/' . CHARGETPL_CLASS;
  12.     require_once $APP_PHPCORE_DIR . '/' . MERGETPL_CLASS;
  13.     require_once $APP_PHPCORE_DIR . '/' . PRINTTPL_CLASS;
  14. ?>

class.constants.php
Código PHP:
Ver original
  1. <?php
  2.     /*definimos las Constantes de la pagina web*/
  3.     define("SESSION_CLASS"      ,"class.session.php");
  4.     define("LANGUAGE_CLASS"     ,"class.language.php");
  5.     define("CHARGETPL_CLASS"    ,"class.chargTPL.php");
  6.     define("MERGETPL_CLASS"     ,"class.mergeTPL.php");
  7.     define("PRINTTPL_CLASS"     ,"class.printTPL.php");
  8. ?>


class.session.php
Código PHP:
Ver original
  1. <?php
  2. class Session{
  3.     function iniciarSession(){
  4.         session_name('NombredeSession');
  5.         session_start();
  6.         // Turn on all error reporting
  7.         error_reporting(E_ALL);
  8.     }
  9. }
  10. ?>


class.language.php
Código PHP:
Ver original
  1. <?php
  2.     class Language {
  3.         //  Method to detect user language
  4.         function detectLanguage() {
  5.             global $DEFAULT_LANGUAGE;
  6.             if ($_SERVER['HTTP_ACCEPT_LANGUAGE']) {
  7.                 $this->languages = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  8.                 $this->language = substr($this->languages,0,2);
  9.                 echo "si acepta HTTP_ACCEPT_LANGUAGE<br>";
  10.                 return $this->language;
  11.             }else{
  12.                 echo "no acepta HTTP_ACCEPT_LANGUAGE<br>";
  13.                 if ($_SERVER['HTTP_USER_AGENT']) {
  14.                     echo "si acepta HTTP_USER_AGENT<br>";
  15.                     $this->user_agent = explode(";" , $_SERVER['HTTP_USER_AGENT']);
  16.                     for ($i=0; $i < sizeof($this->user_agent); $i++) {
  17.                         $this->languages = explode("-",$this->user_agent[$i]);
  18.                         if (sizeof($this->languages) == 2) {
  19.                             if (strlen(trim($this->languages[0])) == 2) {
  20.                                 $size = sizeof($this->language);
  21.                                 $this->language[$size]=trim($this->languages[0]);
  22.                             }
  23.                         }
  24.                     }
  25.                     return $this->language[0];
  26.                 }else{
  27.                     echo "no acepta HTTP_USER_AGENT<br>";
  28.                     $this->language = $DEFAULT_LANGUAGE;
  29.                     return $this->language;
  30.                 }
  31.             }
  32.         }
  33.         //  Method to check if a language exists
  34.         function checkLanguage($language = null) {
  35.             global $LANGUAGE_DIR;
  36.             echo "verificamos si existen los archivos de lenguaje <br>";
  37.             $language = $LANGUAGE_DIR."/".$language.".inc.php";
  38.             if (file_exists($language)){
  39.                 return TRUE;
  40.             }else{
  41.                 return FALSE;
  42.             }
  43.         }
  44.         //Method to set language
  45.         function setLanguage($language = null){
  46.             echo "asignacion de lenguaje <br>";
  47.             global $DEFAULT_LANGUAGE;
  48.             if ($language){ $_SESSION['LANGUAGE'] = $language;}
  49.             if (@!$_SESSION['LANGUAGE']){ $_SESSION['LANGUAGE'] = $this->detectLanguage();}
  50.             if ($this->checkLanguage($_SESSION['LANGUAGE'])) {
  51.                 $lang =  $_SESSION['LANGUAGE'];
  52.                 return $lang;
  53.             }else{
  54.                 return $DEFAULT_LANGUAGE;
  55.             }
  56.         }
  57.         //Method to get the language configuration
  58.         function getLanguage($language = null) {
  59.             echo "obtenemos la configuracion del lenguaje <br>";
  60.             global $LANGUAGE_DIR;
  61.             $lang = $this->setLanguage($language);
  62.             include_once $LANGUAGE_DIR."/".$lang.".inc.php";
  63.             return $language = $lang;
  64.         }      
  65.     }
  66. ?>

problema resuelto. esto es MVC y POO, si alguien tiene algún aporte o sugerencia pues la tomare en cuenta.
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #7 (permalink)  
Antiguo 02/07/2014, 21:02
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Eror con $_SESSION

Cita:
Iniciado por arcanisgk122 Ver Mensaje
Disculpa si dudo de lo que argumentas pero por que dices que no puede estar session_start() dentro de alguna funcion o script, que yo entienda después que su llamada este al inicio del código no debe haber ningún problema:
Justamente porque nunca podria estar antes que en:

Código PHP:
<?php

session_start
();
Si lees el manual advertiras que cualquier error / warning etc etc puede evitar funcionen las sessiones asi que por eso debe estar al comienzo incluso delante de los include()
__________________
Salu2!
  #8 (permalink)  
Antiguo 02/07/2014, 21:09
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Respuesta: Eror con $_SESSION

Cita:
Iniciado por Italico76 Ver Mensaje
Justamente porque nunca podria estar antes que en:

Código PHP:
<?php

session_start
();
Si lees el manual advertirás que cualquier error / warning etc etc puede evitar funcionen las sesiones así que por eso debe estar al comienzo incluso delante de los include()
sigo sin entenderte sabes por que :

todo lo que mencionas error / warning etc etc son salidas por pantallas que ocurren al paso por el php.

en tal caso la funcion o clase que se dedica a sesiones de algún error y no permita que este funcione correctamente igual enviara por pantalla una notificación o warning... asi que no me afecta si o si hay que reparar los errores y las notificaciones...
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #9 (permalink)  
Antiguo 02/07/2014, 21:42
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Eror con $_SESSION

emmmmmmmmm...

session_start() no es cualquier funcion de manejo de session porque debe tener prioridad

Estas obviamente haciendo include() e instanciando clases que pueden fallar por algun motivo como Language.

Código PHP:
Ver original
  1. //instanciamos las clases
  2. $sesion     =   new Session();
  3. $language   =   new Language();
  4.  
  5. $sesion ->  iniciarSession();//iniciamos sesion


Cita:
si o si hay que reparar los errores y las notificaciones...
En "producccion" por un simple Warning vas a impedir que tus usuarios se logueen por ejemplo ? o si tienes una tienda la dejaras completamente inutilizable ? (sin sessiones no puedes hacer nada: logueo, carrito....)


Puedes hacerlo comoo quieras (es tu codigo) pero no es buena practica
__________________
Salu2!
  #10 (permalink)  
Antiguo 02/07/2014, 22:02
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Respuesta: Eror con $_SESSION

entiendo perfectamente lo que me dices ahora. pero no veo el por que de ser una mala practica si esta programado correctamente.
ademas respetando el modelo MVC de programacion y OOP.

se supone que debo separar el código php del HTML y no creo que repetir

Código PHP:
Ver original 

sea una buena practica.

tampoco entiendo por que si tengo un error en una funcion que maneje sesiones inutilizara un carrito o sistema de logueo... si de por si se supone que la parte que crea la sesión esta perfecta...
admito que puede haber problemas en que no funcione bien a la hora de hacer funciones que manipulen la sesión o que demande mas esfuerzo pero no creo que hacer las cosas bien acarre algun problema...

has mirado al menos el codigo que subi???

Código PHP:
Ver original
  1. <?php
  2. class Session{
  3.     function iniciarSession(){
  4.         session_name('NombredeSession');
  5.         session_start();
  6.         // Turn on all error reporting
  7.         error_reporting(E_ALL);
  8.     }
  9. }
  10. ?>

en que afectaría esto un sistema de logueo??? la unica duda que me queda es que el hacer la llamada de la funcion:

Código PHP:
Ver original
  1. iniciarSession()

sobre escriba la sesión y borre los datos
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #11 (permalink)  
Antiguo 03/07/2014, 06:46
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Eror con $_SESSION

Hola amigo:

En tu ultimo post has sido muy certero en tus inquietudes, veamos porque:

Código PHP:
Ver original
  1. <?php
  2. class Session{
  3.     function iniciarSession(){
  4.         session_name('NombredeSession');
  5.         session_start();
  6.         // Turn on all error reporting
  7.         error_reporting(E_ALL);
  8.     }
  9. }
  10. ?>

- Creas una clase que contiene un unico metodo ?

- No acepta ningun parametro (NombredeSession por ejemplo) ? Encima toca invocarlo ? (en todo caso ese metodo seria el constructor de la clase)

- Habras leido que las clases deben tener una sola responsabilidad y estas activando errores ahi


Cita:
en que afectaría esto un sistema de logueo??? la unica duda que me queda es que el hacer la llamada de la funcion:

Código PHP:
Ver original
  1. iniciarSession()
Lo dicho anteriormente.... esa clase es totalmente inutil..... la creas para hacer nada.....y si le incluyeras un session_destroy() en un metodo destruirSession() seria igualmente inutil..... para que encapsular funciones nativas del lenguaje ? que has agregado tu de funcionalidad o donde hay variables que deban separarse del "global scope" ? como se justiica el encapsulamiento ?
__________________
Salu2!

Última edición por Italico76; 03/07/2014 a las 07:00
  #12 (permalink)  
Antiguo 03/07/2014, 14:22
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Respuesta: Eror con $_SESSION

justifico en encapsulado para posterior edición o agregar nuevas funciones basadas en el uso de sesiones, sea procedimientos o manipulación de datos de sesiones. en tal caso si existe una mejor forma de crear una clase para iniciar, destruir y manejar sesiones me gustaría ver el aporte.

creo que se basan simplemente en lo que ven y yo estoy armándolo pensando de cara al futuro
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB

Etiquetas: session, variable
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:51.