Foros del Web » Programando para Internet » PHP »

Sesiones que se cierran al abrir nuevas ventanas

Estas en el tema de Sesiones que se cierran al abrir nuevas ventanas en el foro de PHP en Foros del Web. Hola a tod@s. No se si va aquí directamente, o si debería ir en javascript. La aplicación que estoy haciendo carga, según los privilegios del ...
  #1 (permalink)  
Antiguo 19/12/2011, 14:04
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 8 meses
Puntos: 5
Sesiones que se cierran al abrir nuevas ventanas

Hola a tod@s.

No se si va aquí directamente, o si debería ir en javascript.

La aplicación que estoy haciendo carga, según los privilegios del usuario, hasta tres valores distintos en la sesión. El caso es que una de esas sesiones es la que permite que el usuario haga algunas operaciones especiales, algunas de ellas se hacen desde una nueva ventana; pero el problema está porque la sesión se sobreescribe con un valor vacío cuando se abre la ventana.

El javascript que uso es hiper sencillo:
Código:
window.open(URL,ventana,"width=800,height=500,scrollbars=YES")
Como lo poco que se sobre php lo voy aprendiendo sobre la marcha, no tengo muy claro si para un sistema de privilegios de usuarios este modo de manejar las sesiones es el más adecuado, o si por el contrario tendría que pensar en otra cosa...

La página que se carga con el javascript, es un php con un if else para asegurarse de que se haya pasado un valor por el url, y después de eso hay un switch, y cada case comprueba con varios if else si hay definidas sesiones y demás.

Pero por lo pronto, se os ocurre porqué se puede estar sobreescribiendo/borrando esa sesión? Necesitáis más datos?

Gracias de antemano.
__________________
diseño web | Clan Rol
  #2 (permalink)  
Antiguo 19/12/2011, 14:07
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Sesiones que se cierran al abrir nuevas ventanas

me imagino que olvidaste el session_start() en dicha página PHP, pero claro, ¿como comprobarlo si no posteas el código de PHP?
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 19/12/2011, 14:22
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: Sesiones que se cierran al abrir nuevas ventanas

Muy buenas; muchas gracias por la presteza en responder. Pues el código de la página que se carga es bastante sencillo, tal como os cuento, un if, un switch, y no hay más... Os lo pongo por aquí.

Código:
<?php

session_start();

include ("general.php");

		if($_GET['acc'] == ""){
			echo "
			<h2>Error</h2>
			<p>Estás tratando de acceder a esta página sin definir completamente lo que necesitas.
			<br>Pulsa <a href = 'http://$servidor/$aplicacion/index.php'>AQUÍ</a> para volver al índice.</p>";
		}else{
			if($_GET['id'] ==""){
			echo "
			<h2>Error</h2>
			<p>Estás tratando de acceder a esta página sin definir completamente lo que necesitas.
			<br>Pulsa <a href = 'http://$servidor/$aplicacion/index.php'>AQUÍ</a> para volver al índice.</p>";
			}else{
			
			$auto = "http://$servidor/$aplicacion/includes/detalles.php";
			
			include ("config.php");
			
			$link=mysql_connect($dbserver, $dbuser, $dbpass) or die ("Error conectando a la base de datos.");
			mysql_select_db($database ,$link) or die("Error seleccionando la base de datos.");

			switch ($_GET['acc']){
			
			case 'vras':
			include ("pj_rasgos.php");
			break;
...

?>
Muchas gracias!
__________________
diseño web | Clan Rol
  #4 (permalink)  
Antiguo 19/12/2011, 14:41
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Sesiones que se cierran al abrir nuevas ventanas

¿Y qué parte del código te indica que la sesión desapareció?
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #5 (permalink)  
Antiguo 19/12/2011, 15:03
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: Sesiones que se cierran al abrir nuevas ventanas

Buenas de nuevo:

Muchas gracias por responder tan rápido.

El código con el que lo compruebo es algo improvisado y sencillo, pero eficaz:

Paso la sesión a una variable normal, y la pinto con un echo:

Código:
$loggedin = $_SESSION["loggedin"];
$master = $_SESSION["master"];

...

echo "
$loggedin - $master
";
Para ampliar más la info:

Los hipervínculos con los que abro la nueva ventana son a href tuneados. Son todos as, sustituyendo logicamente el valor del get:

Código:
<a href='' onClick=javascript:ventanaSecundaria('http://$servidor/$aplicacion/includes/detalles.php?acc=vras&id=$id')> E</a>
EDITO: Y en los includes, en gneral.php hay constantes definidas para otras cosas que no vienen a cuento y que al 100% no afectan, y pj_rasgos.php es un formulario con un if que comprueba que $_session['master'] == 1. Nada más.
__________________
diseño web | Clan Rol
  #6 (permalink)  
Antiguo 19/12/2011, 15:09
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Sesiones que se cierran al abrir nuevas ventanas

Ajá, pero necesitamos que nos muestres el código completo.
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #7 (permalink)  
Antiguo 19/12/2011, 15:24
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: Sesiones que se cierran al abrir nuevas ventanas

Aquí os muestro uno de los que meto con los includes.

Código:
			$buscar = "SELECT id,nombre FROM `rasgos`";
			if(!($resultado = mysql_query($buscar))) die(mysql_error());
			$id = $_GET['id'];
			echo "Rasgos
			<form action='http://$servidor/$aplicacion/includes/detalles.php?acc=peras&id=$id' method='post'>
			";
		
			while ($row = mysql_fetch_array($resultado)) 
			{
				echo "<input name='verificar[]' type='checkbox' value='$row[0]'";
				
				$brasgos = mysql_query("SELECT idras FROM personajes_rasgos WHERE idras='$row[0]' AND personajes_rasgos.idpj= '$id' ");
				while($rasgo=mysql_fetch_array($brasgos))
				{
				echo "checked";
				}
				echo "/> $row[1]<br>";
				
			}
		echo '<input class="botones" type="submit" value="Editar"><br>
		
		</form></div>';
Este, por ejemplo, como no lo uso de momento, ni siquiera usa el if de master a 1. Pero probándolo, me falla justo con lo que os describo, exactamente igual.

Os trataré de aclarar algo más sobre mi código:

1. Soy bastante nuevo, pero en verdad que intento prosperar y hacer las cosas bien.
2. No entiendo el sistema de POO, por tanto, apenas lo uso.
3. Todas las páginas se cargan desde el index.php a base de includes, define, switch y cases que paso por el url.
4. Todas las páginas para las que al entrar se requiere un determinado privilegio de usuario tienen el siguiente código:
Código:
if (!defined('APLICACION')){
	echo "Estás tratando de acceder a esta página de forma erronea.<br>
	Pulsa <a href='http://$servidor/$aplicacion/index.php'>AQUÍ</a> para volver a la página principal.";
}else{
	//Comprobamos que el usuario que trata de acceder pertenece al grupo
	if (!isset($_SESSION['lvl'])){
	echo "
	<h2>Error</h2>
	<p>Estás tratando de acceder a una página cuyo acceso se encuentra restringido a los Masters.
	<br>Pulsa <a href = 'http://$servidor/$aplicacion/index.php?acc=men'>AQUÍ</a> para volver.</p>";
	}else{

...
¿Ideas? :D

muchas gracias
__________________
diseño web | Clan Rol
  #8 (permalink)  
Antiguo 19/12/2011, 15:33
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Sesiones que se cierran al abrir nuevas ventanas

Mi idea es una de dos:
- No muestras el código completo
- No haces session_start donde deberías

Saludos
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #9 (permalink)  
Antiguo 19/12/2011, 15:49
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: Sesiones que se cierran al abrir nuevas ventanas

el sesion_start lo hago en el index.php general... y en la página que cargo, por supuesto.

En ninguna más.
__________________
diseño web | Clan Rol
  #10 (permalink)  
Antiguo 19/12/2011, 20:17
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: Sesiones que se cierran al abrir nuevas ventanas

Cita:
Iniciado por toledo_nocturno Ver Mensaje
el sesion_start lo hago en el index.php general... y en la página que cargo, por supuesto.

En ninguna más.
Saludos. Y que síntoma te da que te hace pensar que la sesión no funciona? Como es que detectas que las variables de sesión están vacías?

Saludos
__________________
Los hombres pequeños, nunca se sienten pequeños; los hombres grandes, nunca se sienten grandes.

No sé quien fué el que dijo eso, pero está bueno.
  #11 (permalink)  
Antiguo 20/12/2011, 01:28
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: Sesiones que se cierran al abrir nuevas ventanas

Muy buenas:

Para probarlo, muestro las sesiones con un echo.

Código:
$loggedin = $_SESSION["loggedin"];
$master = $_SESSION["master"];

...

echo "
$loggedin - $master
";
¿Y el modo en el que abro la nueva ventana con el onclick no puede tener algo que ver, que me falte poner ahí algo más?

Gracias ^.^
__________________
diseño web | Clan Rol
  #12 (permalink)  
Antiguo 20/12/2011, 03:34
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: Sesiones que se cierran al abrir nuevas ventanas

No importa la forma en que abres la ventana. Siempre que te mantengas dentro del sitio y pongas session_start() al inicio de la página debes poder acceder a las variables de $_SESSION.

Las causas mas comunes para un error como ese son:

1- Falta el session_start() al principio de la página. O ejecutas session_start() dentro de una condición que no se estácumpliendo.

2- En alguna parte del códgo estás sobreescribiendo las variables de sesion con valores vacíos antes de intentar usarlas.

Te pasa lo mismo con todas las páginas o es con una específicamente?

Saludos.
__________________
Los hombres pequeños, nunca se sienten pequeños; los hombres grandes, nunca se sienten grandes.

No sé quien fué el que dijo eso, pero está bueno.
  #13 (permalink)  
Antiguo 20/12/2011, 04:09
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: Sesiones que se cierran al abrir nuevas ventanas

Con todas. Las hay más complejas, pero en esencia la cosa está en que da igual lo que cargue. Voy a hacer otra página distinta en la que sólo vaya un echo y el session_start para ir probando cosas y ver exactamente donde aparece el error, y os cuento.

Gracias mil :D

EDITO:

Da igual. Hay algo en mi página, previo al abrir la página nueva, que es lo que hace que se sobre escriba. El index es lo siguiente:

Código PHP:
<?php 


session_start
();
define("FORJA"1); //Definimos una constante para evitar que se ejecuten las demás páginas por separado.

include ("includes/general.php"); /*Aquí van sólo varias info generales, de mensajes y demás en variables. No puede estar aquí el error.*/

echo "
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1' />
<title>Runesword</title>
<link rel='stylesheet' type='text/css' href='estilos/estilo.css' media='screen' />
<script type='text/javascript' src='funciones/nventana.js'></script>

</head>
<body>

"
;


include (
"includes/menu.php"); //Menú en html que se carga o no según las sesiones.
require("includes/seccion.php"); //un switch que va pasa las variables de general.php y los enlaza con las páginas finales
include ("funciones/zebra.php"); //función para zebrear las tablas.
include ('funciones/bbcode.php'); //Función para parsear los cambos de textarea

include($seccion); //La página que deice seccion.php; en este caso la que os puse al principio.
    
include ("includes/footer.php"); //Un footer en html
?>
__________________
diseño web | Clan Rol

Última edición por toledo_nocturno; 20/12/2011 a las 04:24
  #14 (permalink)  
Antiguo 20/12/2011, 10:25
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: Sesiones que se cierran al abrir nuevas ventanas

Buenas de nuevo.

Me respondo a mi mismo porque después de andar indagando y quitando todo el código poco a poco para ver dónde está el error, ya lo he encontrado.

El fallo estaba en que la variable de sesión del grupo (Master en este caso) recibia el mismo nombre que los datos que pasaba yo por una variable. Ha sido renombrar mi variable y, evidentemente, todo ha funcionado con normalidad.

Muchas gracias a todos por vuestra ayuda, que me ha servido mucho para ir descartando cosas.

Saludos!
__________________
diseño web | Clan Rol

Etiquetas: nuevas, sesiones, ventanas, 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 07:41.