PHP - cookies php no funcionan en frame fuera del server

 
Vista:

cookies php no funcionan en frame fuera del server

Publicado por Jesus Camacaro (22 intervenciones) el 27/08/2005 22:48:23
Ante todo Gracias por dedicarse a leer este post.

ok. mi situacion es que estoy tratando de armar un web site, y funciona bien viendolo directamente en la direccion real. y cuando intento abrirlo dentro de un frameset, no se puede iniciar sesion. ( esto no pasa con todos los usuarios ) ojo esto no hace que deje de conectarse con la base de datos...

Estuve leyendo los manuales de php que consegui a mano y practicamente se me sugeria utilizar el comando session_start(); en el frameset tambien. el cual es mi problema en este caso. pues que el frameset no esta en el mismo dominio por lo tanto no surte ningun efecto.
a continuacion coloco mi codigo fuente a ver si ustedes pueden ayudarme ya que lo e revisado de arriba hasta abajo y no consigo la falla.

<?php
session_start();
@include("config.php");

function confirmUser($username, $password){
global $conn;

if(!get_magic_quotes_gpc()) {
$username = addslashes($username);
}

$q = "select * from perfiles where username = '$username'";
$result = @mysql_query($q,$conn);
if(!$result || (mysql_numrows($result) < 1)){
return 1;
}

$dbarray = mysql_fetch_array($result);
$dbarray['password'] = stripslashes($dbarray['password']);
$_SESSION['genero'] = stripslashes($dbarray['genero']);
$_SESSION['nickname'] = stripslashes($dbarray['nickname']);
$password = stripslashes($password);

if($password == $dbarray['password']){
return 0;
}
else{
return 2;
}
}

function checkLogin(){
if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookpass'])){
$_SESSION['username'] = $_COOKIE['cookname'];
$_SESSION['password'] = $_COOKIE['cookpass'];
$_SESSION['genero'] = $_COOKIE['cookgenero'];
$_SESSION['nickname'] = $_COOKIE['cooknick'];
}

if(isset($_SESSION['username']) && isset($_SESSION['password'])){
if(confirmUser($_SESSION['username'], $_SESSION['password']) != 0){
unset($_SESSION['username']);
unset($_SESSION['password']);
unset($_SESSION['genero']);
unset($_SESSION['nickname']);
return false;
}
return true;
}
else{
return false;
}
}

function displayLogin(){
global $logged_in;
if($logged_in){
?>
<html>
<?
echo "<div align=\"right\"> <font color=\"#800000\">|<a href=\"/index.php\"> Home</a> |<a href=\"http://theglam.ddtradio.com.ve/perf.php?name=$_SESSION[nickname]\"><b> Bienvenido ".$_SESSION[username]." </a><n> |<a href=\"http://theglam.ddtradio.com.ve/foto/index.php\"> Fotos</a> | <a href=\"/edit.php\">Editar perfil</a> | <a href=\"http://theglam.ddtradio.com.ve/salir.php\">Cerrar sesion</a></font></b> | Libro De Visitas | Acerca De Nosotros | |</n></font></div>";
?>

<?
echo "</BODY>"
."</HTML>";
}
else{
?>

<?
echo "<form action=\"/entrar.php\" method=\"post\" >"
."<input type=\"text\" size=\"2\" class=\"post\" name=\"user\" maxlength=\"30\">"
."Password:"
."<input type=\"password\" size=\"2\" class=\"post\" name=\"pass\" maxlength=\"30\">"
."<input type=\"submit\" size=\"2\" name=\"sublogin\" value=\"login\" class=\"post\">"
."</form>"
?>

<?
echo "</BODY>"
."</HTML>";
}
}
if(isset($_POST['sublogin'])){
if(!$_POST['user'] || !$_POST['pass']){
die("No introduciste un campo");
}
$_POST['user'] = trim($_POST['user']);
if(strlen($_POST['user']) > 30){
die("El username debe ser menor de 30 caracteres");
}
$md5pass = md5($_POST['pass']);
$result = confirmUser($_POST['user'], $md5pass);

if($result == 1){
die("Esta cuenta no existe");
}
else if($result == 2){
die("Password incorrecto");
}

$_POST['user'] = stripslashes($_POST['user']);
$_SESSION['username'] = $_POST['user'];
$_SESSION['password'] = $md5pass;

if(isset($_POST['remember'])){
setcookie("cookname", $_SESSION['username'], time()+60*60*24*100, "/");
setcookie("cookpass", $_SESSION['password'], time()+60*60*24*100, "/");
setcookie("cookgenero", $_SESSION['genero'], time()+60*60*24*100, "/");
setcookie("cooknick", $_SESSION['nickname'], time()+60*60*24*100, "/");
}
//$HTTP_SERVER_VARS[PHP_SELF]
echo "<meta http-equiv=\"Refresh\" content=\"0;url=index.php\">";
return;
}
$logged_in = checkLogin();
?>


Obviamente para ustedes solo incluyo este comando en donde quiero que aparescan los datos:

<? displaylogin (); ?>

pues esto como os dije antes, funciona bien cuando esta fuera de un frame, no a todos los usuarios les pasa igual, algunos pueden entrar al sitio sin problema alguno...

Bueno ante todo muchas gracias por leer el post y si pudieran darme una pista de como solucionar esto no importa cuan pequeña y segura sea ya que no descarto q me falte una pequeñes en el codigo igual se los agradecere...

Jesús Camacaro.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Listo!!

Publicado por Jesus Camacaro (22 intervenciones) el 29/08/2005 20:11:48
Bueno Gente consegui una manera de solucionar la falla.
esta consiste en instalar un modulo en el server php q se llama rK11.dll
este permite conectar un servidor con otro servidor remoto sin que se pierdan los codigos php y asi pude colocar el session_star en las frames..
ojo esto solo funciona con la actual version beta de php ...

j. Camacaro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listo!!

Publicado por Mike79 (669 intervenciones) el 29/08/2005 21:54:38
¿Aver si entendi bien, estas usando una versión inestable de php, corriendo en windows?
¿Cual me dijiste que es tu página web?.

Yo creo que aqui el problema es de logica.

Una cookie solo se puede ver en la misma página web donde fue declarada (Por razones de seguridad).

Por lo tanto, lo más sano es que no estes "inventando" el hilo negro de esta forma. Existen otras técnicas para lograr comunicación entre servidores. Entre ellos, talvez la más común y simple, es que tu cookie este en el mismo dominio, y que los servidores esten en diferente subdominio.

Por ejemplo:
www.midominio.com
servidor2.midominio.com

Y declarar la cookie para el dominio: "midominio.com", y ahora si, los dos servidores pueden compartir la session.

Una técnica más laboriosa, es tener 2 servidores (o más), y que uno, sea el principal.
Entonces el cliente se identifica con mi servidor principal, y este regrese una serie de "identificaciones".
Cuando de ahi manda al segundo servidor, pasarle la serie de identificaciones, y aqui hay de 2:

1.- Que el segundo servidor calcule las identificaciones para que coincidan.
2.- Que el segundo servidor se conecte al primero para verificar las identificaciones de ese cliente.

Esto en la practica quedaria mas o menos asi:
http://www.midominio.com
(Regresa una página web, con links, frames o lo que sea a otra página en otro servidor, por ejemplo).

http://www.otrodominio.com/foros/?Login=Usuario&Id=4509483

En este caso, como pueden ver, el link tiene una "serie de identificadores" o "parametros" o como quieran decirle, que nos va a identificar al usuario. El número puede ser un md5, o un número generado de forma aleatorio, o algo que identifique a ese usuario. El servidor de midominio.com guardo en su base de datos ese ID que genero.

Cuando el usuario entra al otro dominio, este abrira una conexion al primero, diciendole, "hey el usuario, dice que es el, y trae su Id 4509483", el servidor primario checara en su base de datos y respondera "si, asi es", de esta forma el otrodominio.com iniciara sesiones y hara todo lo que tenga que hacer.

Como se puede apreciar, esta técnica no es tan sencilla de hacer. Pero es exactamente lo que hace tu .dll, la ventaja es que si lo haces tú, no necesitas de versiones inestables de php, ni de que corra en windows.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listo!!

Publicado por Jesùs camacaro (22 intervenciones) el 31/08/2005 00:14:15
1. mi servidor no corre en windows, corre bajo linux.
2. la pagina es http://elglam.com
3. el .dll hace que los dos servidores interactuen entre si.
4. la version beta de php la recibi del administrador de www.php.com.ve es tan segura como la ultima version del php solo que esta permite conectarse entre servidores remotos. utilizando un medio unilateral de conexion siempre y cuando este tenga un numero de identificacion para que reconosca al usuario...

otra cosa. cuando me dices: "Una cookie solo se puede ver en la misma página web donde fue declarada (Por razones de seguridad)." no aplica en este caso. ya que la pagina esta siendo ejecutada por completo en el frame. asi que siempre a sido vista desde este. y el navegador simplemente lo interpreta como una ventana mas. en cambio si entre mis links hubiera una mezcla por ejemplo que el login se hiciera en http://www.elglam.com y despues de direccionara a http://elglam.com la cookie dejaria de funcionar.pero esto no es asi...




Jesús Camacaro
trenth
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar