Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Una sesión por cada aplicación

Estas en el tema de Una sesión por cada aplicación en el foro de PHP en Foros del Web. Hola a todos. «Decir que este es mi primer mensaje en el foro, y si cometo algún error espero que me lo perdonen.» Bueno, mi ...
  #1 (permalink)  
Antiguo 29/05/2013, 13:12
 
Fecha de Ingreso: mayo-2013
Mensajes: 169
Antigüedad: 10 años, 10 meses
Puntos: 25
Pregunta Una sesión por cada aplicación

Hola a todos.
«Decir que este es mi primer mensaje en el foro, y si cometo algún error espero que me lo perdonen.»

Bueno, mi gran duda proviene con las sesiones. Su funcionamiento básico lo entiendo bastante bien. Pero cuando tengo varias aplicaciones creadas en un mismo sitio web, ya me empiezan a dar quebraderos de cabeza.

Para iniciar una sesión y variables de las mismas hago esto:

Código PHP:
session_start();
$_SESSION[login] = true
Para cerrar las sesion:
Código PHP:
session_start();
session_destroy(); 
Pero claro, si hago un session_destroy() con una aplicación web entonces se cierra toda la sesión, para todas las aplicaciones webs que tenga en el sitio.

Es decir, lo que quiero es tener varias aplicaciones webs independientes en un mismo sitio web, y que no me generen conflictos entre ellas. Así que si cierro una sesión de una de la aplicaciones, no se cierren para todas.

Y claro, como cuando yo programo una nueva aplicación en php suelo seguir una misma estructura y mismos nombres de variables. Y así economizar codigo. Quiero poder usar un mismo nombre de variable en diferentes aplicaciones, sin que ninguna otra aplicación acceda a la variable de sesion de la otra. Como a continuación hago.

script: aplicacion1.php
Código PHP:
session_start();
$_SESSION[login] = true;
$_SESSION[user] = "resultado de consulta de la Base de datos aplicacion_1"
script: aplicacion2.php
Código PHP:
session_start();
$_SESSION[login] = true;
$_SESSION[user] = "resultado de consulta de la Base de datos aplicacion_2"
Como ven quiero dos aplicaciones que aunque tengan la misma estructura, no quiero que compartan la misma sesión. No quiero iniciar sesión en una y se inicien automaticamente sesión en la otra. Y lo mismo no quiero destruir la sesion en una y se destruya en las demás.

¿Cómo puedo hacer una sesión determinada para cada aplicación en el mismo servidor?

He estado mirando la función session_name() pero no comprendo su uso. Ni tampoco consigo concebir si esta función es la solución a mi problema.

PD: Ya he buscado en San Google, y en el buscador de este foro, pero las respuestas dadas en dichos temas, no me convencen, o no son lo suficiente claras, o simplemente no es exactamente lo que busco.

De antemanos, muchas gracias.
Un cordial saludo,

Amiancht
  #2 (permalink)  
Antiguo 29/05/2013, 13:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Una sesión por cada aplicación

¿Qué te parece algo así?
Código PHP:
Ver original
  1. $_SESSION['app_1']['user'] = 'alvaro';

Así sólo destruyes el contenido de app_1, sin tener que afectar nada más.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 29/05/2013, 14:43
 
Fecha de Ingreso: mayo-2013
Mensajes: 169
Antigüedad: 10 años, 10 meses
Puntos: 25
Respuesta: Una sesión por cada aplicación

Agradezco la respuesta,
y creo que comprendo el metodo que me propones.

Crear un vector como variable de sesión llamado app1, app2, app3, según la aplicación.

Y supongo que en vez de llamar a session_destroy(), hago un unset de dicho vector.

Pero ¿no existe un metodo predefinido, para crear diferentes sesiones con PHP? Simplemente, pregunto no sé si habrá alguno.

¿Y ya por curiosidad el session_name(), al final que uso tiene?
  #4 (permalink)  
Antiguo 29/05/2013, 19:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Una sesión por cada aplicación

Si tienes dudas de funciones especificas, o del comportamiento exacto de las sesiones entonces es mejor que consultes el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 29/05/2013, 23:37
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Respuesta: Una sesión por cada aplicación

el sesión name puedes usarlo para evitar el uso de un array y personalizar la sesión evitar que otra web acceda a tu variable de sesión entre otros muchos mas beneficios ... en serio creo que te falta mas lectura..
__________________
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
  #6 (permalink)  
Antiguo 30/05/2013, 03:41
 
Fecha de Ingreso: mayo-2013
Mensajes: 169
Antigüedad: 10 años, 10 meses
Puntos: 25
De acuerdo Respuesta: Una sesión por cada aplicación

Cita:
Iniciado por pateketrueke Ver Mensaje
Si tienes dudas de funciones especificas, o del comportamiento exacto de las sesiones entonces es mejor que consultes el manual.
¿Cómo crees que conozco el nombre de esa función? Ya dije que he buscado información en todos sitio que conozco, incluso en los manuales del foro, tambien php.net, y en los temas antiguos del foro.

Por favor, no me trates de noob ya que el php manual es la segunda web que más consulto, por triste que pueda parecer.

Cito textualmente del php.net:
http://es1.php.net/manual/es/function.session-name.php
Cita:
session_name() devuelve el nombre de la sesión actual. Si se da el nombre name, session_name() actualizará el nombre de la sesión y devolverá el nombre antiguo de la sesión.

El nombre de la sesión se reinicia al valor predeterminado almacenado en session.name en el momento de iniciar una petición. Por lo tanto, se necesita llamar a session_name() por cada petición (y antes de llamar a session_start() o session_register()).
Y el ejemplo php.net.
Código PHP:
<?php

/* establecer el nombre de la sesión a WebsiteID */

$nombre_anterior session_name("WebsiteID");

echo 
"El nombre anterior de la sesión era $nombre_anterior<br />";
?>
Yo con esta poca información, y solo ese ejemplo de uso, no llego a concebir lo que nuestro amigo arcanis nos ha dicho:
Cita:
Iniciado por arcanisgk122 Ver Mensaje
el sesión name puedes usarlo para evitar el uso de un array y personalizar la sesión evitar que otra web acceda a tu variable de sesión entre otros muchos mas beneficios ... en serio creo que te falta mas lectura..
Gracias, arcanis, por la información. Eso mismo era lo que quería saber.
Estuve buscando información, al respecto y no la encontraba.
Haré unas pruebas y os comentó si me funciona.

Aunque no estoy seguro si es necesario inicializar con session_start(), antes o despues de usar el session_name(). Pero lo dicho hare algunas pruebas.

De nuevo, gracias a los dos por responder.
  #7 (permalink)  
Antiguo 30/05/2013, 03:46
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Una sesión por cada aplicación

Coincido con arcanisgk122 en cuanto a usar nombre de sesión, sería más manejable y fácil de mantener.

Código PHP:
Ver original
  1. <?php
  2. session_name('app1');

Todo lo demás lo manejas igual que lo has hecho hasta ahora.
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 30/05/2013, 04:14
 
Fecha de Ingreso: mayo-2013
Mensajes: 169
Antigüedad: 10 años, 10 meses
Puntos: 25
Respuesta: Una sesión por cada aplicación

Mucha gracias Triby

He echo mis pruebas, y funciona correctamente.

Iniciar sesion:
Código PHP:
<?php
//app1/index.php
    
session_name("app1");
    
session_start();
    
    if(isset(
$_SESSION['ap'])){
        echo 
$_SESSION['ap'];
    }
    else{
        
$_SESSION['ap'] = 1;
        echo 
"inicio sesion app1";
    }    
?>
Cerrar sesion:
Código PHP:
<?php
//app1/logout.php
    
session_name("app1");
    
session_start();
    
session_destroy();
    echo 
"Session 1 destruida";
?>
He probado con dos app gemelas, con un nombre de sesion para cada una, cambiando el valor que se le da a $_SESSION['ap'] y funciona correctamente. No se mezclan variables, ni al destruir una sesion se destruye la otra.

Lo que no entiendo porque en el manual de php.net, está información que me habeís dado no aparece.

Muchas gracias a todos por la ayuda.
  #9 (permalink)  
Antiguo 30/05/2013, 08:29
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Respuesta: Una sesión por cada aplicación

prefiero no dejar rastros:

Código PHP:
Ver original
  1. <?php
  2. session_name('MI_SESION');
  3. $_SESSION = array();
  4. if (ini_get("session.use_cookies")) {
  5.     $params = session_get_cookie_params();
  6.     setcookie(session_name(), '', time() - 60000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);
  7. }
  8. ?>
  9. <?php
  10. header('Location: ../index.php');
  11. ?>
__________________
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: multiples, sesiones
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 11:27.