Foros del Web » Programando para Internet » PHP »

Ayuda con Sessions

Estas en el tema de Ayuda con Sessions en el foro de PHP en Foros del Web. Teno un gran problema, llego a establecer mis sessiones con session, este es mi archivo de comprobacion: Código PHP: <?php session_name ( 'pd' ); session_start ...
  #1 (permalink)  
Antiguo 11/05/2004, 13:28
Avatar de alucard3003  
Fecha de Ingreso: abril-2004
Mensajes: 148
Antigüedad: 20 años
Puntos: 0
Ayuda con Sessions

Teno un gran problema, llego a establecer mis sessiones con session, este es mi archivo de comprobacion:

Código PHP:

<?php
session_name
('pd');
session_start();
session_register('login');
session_register('masterlogin');
session_register('codigo');
session_register('name');

  
$user=$HTTP_POST_VARS['user'];
  
$pass=$HTTP_POST_VARS['pass'];

  if (
$user==null AND $pass==null){header("location: login.php");
  }else{
  
session_name('pd');
  
session_start ();
  include(
"cone.php");
  
$tabla="usuarios";
  
$query mysql_query ("SELECT codigo FROM $tabla WHERE codigo='$user' AND clave='$pass'"$conexion);
  if (
mysql_num_rows($query)==1) {
  
session_register ('login');
  
session_register ('codigo');
  
$_SESSION['login']=true;
  
$_SESSION['codigo']=$user;
  
header("location: presentacion.php");
  }else{
    
$tabla="admin";
    
$query mysql_query ("SELECT codigo FROM $tabla WHERE nombre='$user' AND pass='$pass'"$conexion);
    if (
mysql_num_rows($query)==1) {
    
session_register ('masterlogin');
    
session_register ('name');
    
$_SESSION['masterlogin']=true;
    
$_SESSION['name']=$user;
    
header("location: presentacion.php");
    }else{ 
header("location: error.php");}
}} 
?>
y bueno me funciona y todo cuando entro solo, pero cuando entran 2 personas o mas se me malogra todo, parece q se mezclan los datos y la gente puede entrar a esta pagina sin estar logeado:

Código PHP:
<?php

session_name
('pd');
session_start();
session_register('login');
session_register('codigo');

if (
$_SESSION['login']==true AND isset($_SESSION['codigo'])){
        include(
"cone.php");
        
$tabla="usuarios";
        
$codigo=$_SESSION['codigo'];
        
$query mysql_query ("SELECT codigo,nombre,apepat,nota1,nota2,nota3,nota4 FROM $tabla WHERE codigo='$codigo'"$conexion);
        
$user mysql_fetch_array($query);
        
$tabla_mod="modapren"?>
Se suponia q estaba restringido para q no entraran si no estubiesen logeados, pero nada igual uingresan, alguien me ayuda porfas, no tengo mucha experiencia en sessiones, o creen q tengo q pasar toda la session id en la url para mayor seguridad o alguna alternativa, porfas?
__________________
X
  #2 (permalink)  
Antiguo 11/05/2004, 14:45
Avatar de alucard3003  
Fecha de Ingreso: abril-2004
Mensajes: 148
Antigüedad: 20 años
Puntos: 0
ya limpie un poco el primer codigo y lo he dejado asi

Código PHP:
  $user=$HTTP_POST_VARS['user'];
  
$pass=$HTTP_POST_VARS['pass'];

  if (
$user==null AND $pass==null){header("location: login.php");
  }else{
  
session_name('pd');
  
session_start ();
  include(
"cone.php");
  
$tabla="usuarios";
  
$query mysql_query ("SELECT codigo FROM $tabla WHERE codigo='$user' AND clave='$pass'"$conexion);
  if (
mysql_num_rows($query)==1) {
  
session_register ('login');
  
session_register ('codigo');
  
$_SESSION['login']=true;
  
$_SESSION['codigo']=$user;
  
header("location: presentacion.php");
  }else{
    
$tabla="admin";
    
$query mysql_query ("SELECT codigo FROM $tabla WHERE nombre='$user' AND pass='$pass'"$conexion);
    if (
mysql_num_rows($query)==1) {
    
session_register ('masterlogin');
    
session_register ('name');
    
$_SESSION['masterlogin']=true;
    
$_SESSION['name']=$user;
    
header("location: presentacion.php");
    }else{ 
header("location: error.php");} 
Pero al parecer igual se siguen filtrando las sesiones, no se q hacer
__________________
X
  #3 (permalink)  
Antiguo 14/05/2004, 10:31
Avatar de alucard3003  
Fecha de Ingreso: abril-2004
Mensajes: 148
Antigüedad: 20 años
Puntos: 0
ya no esta raro

bueno ahora despues de probar con 4 personas online he sacado como conclusion q no estoy mal, creo q las funciones sessions funcionan a la par con el ip de la persona, no? o algo asi, a menos q ese codigo se haya repetido en las dos maquinas...raro....me refiero al session_id q creo q es unico porq son varios digitos
o me equivoco?
__________________
X
  #4 (permalink)  
Antiguo 14/05/2004, 16:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
NO mezcles session_register() con $_SESSION . usa uno u otro método pero no ambos simultáneamente!.

Lo que hace que las "sesiones" funcionen se denomina "SID" (Identificador único de sesión) y de la propagación de este depende que o cuando puedes leer las variables que guardas en tu sesión.

Revisa en tu configuración de PHP (php.ini o phpinfo()) como propagas el SID: por el URL? .. en cookies? .. de forma automática o manual?

Según tu código y uso de header() para redireccionar y no propagar el SID de forma manual por tu parte .. te ves en la obligación de que PHP propage el SID en cookies y que tu navegador de pruebas (o el de tus usuarios) permita el uso de cookies.

Mas info en:
www.php.net/session

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 15/05/2004, 14:59
Avatar de alucard3003  
Fecha de Ingreso: abril-2004
Mensajes: 148
Antigüedad: 20 años
Puntos: 0
umm...

el manual q lei tenia q hacer los sessions_register antes de darle un valor a una variable, entonce simplemente la uso asi no mas, y a parte tengo q progradar el sid por la url, ummtengo q replantear varias cosillas o exite otra solucion'?
__________________
X
  #6 (permalink)  
Antiguo 15/05/2004, 15:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Los manuales "caducan" .. PHP cambia (para mejor normalmente) por eso te recomiendo el uso de los arrays superglobales para trabajar con sesiones y por lo menos NO MEZCLAR como ya comenté un session_register() con un $_SESSION

Todo esta información sobre sesiones actualizada la puedes ver desde la funente oficial que salen todos esos manuales y de donde yo mismo aquí en el foro no me canso de repetir:

www.php.net/session

Te recomiendo que te des el tiempo en leerlo .. cualquier duda al respecto por aquí te podrémos orientar (usa el buscador por sesiones .. que se suele hablar mucho del tema).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 15/05/2004, 16:08
Avatar de alucard3003  
Fecha de Ingreso: abril-2004
Mensajes: 148
Antigüedad: 20 años
Puntos: 0
ya lei un pocoo

y mas o menos saq como conclusion de q solo debo usar $_SESSION['var'] pero lo q no me quedo muy claro es si quiero definir una variable nueva, simplemente hago un $_SESSION['nuevo'] como si definiera una variable nueva comun y corriente? ($nuevo=)?
Y una ultima cosa (Disculpa por siempre fastidiar Cluster y todos los q leen mis post), en los headers q pongo deberia pasar el SID, no?

POr ejemplo:

header("location: login.php?session_name().session_id() ")

Algo asi???
__________________
X
  #8 (permalink)  
Antiguo 16/05/2004, 07:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
$_SESSION es un array común y corriente (bueno, mejor dicho no es tan "corriente" ya que es "superglobal" donde puedes acceder a sus indices desde cualquier sitio (función) sin importar el ambito de las variables ya que ya son "superglobales").. Para definir una "variable" y su valor correspondiente en ella, usa un "indice" de ese array para el "nombre de tu variable" y le asignas tu valor; directamente o tomado desde otro proceso/variable que ya uses ..


Ejemplo:

Código PHP:
<?
session_start
()
$variable="nose";
$_SESSION['variable_sesion']=$variable;
ó bien:

Código PHP:
<?
session_start
();
$_SESSION['variable_sesion']="nose";
Y para acceder a esa "varaible_sesión" .. simplemente usa ese indice del array $_SESSION:

Código PHP:
<?
session_start
();
echo 
$_SESSION['variable_sesion'];
Si quieres propagar el SID de forma manual sin uso de cookies:

Código PHP:
header("location: login.php?session_name()."=".session_id() "
ó bien usando SID como constante que es:

Código PHP:
header("location: login.php?".SID
Pero antes de nada, asegurate e intenta entender que es el "SID" y las formas que hay de propagarlo: COOKIES (lo más seguro y lo que recomienda PHP.net) o bien manualmente como los ejemplos dados.

El que "PHP" propague el SID en cookies o no lo determina las directivas de configuración: php.ini

session.use_cookies ... y opcionalmente session.use_only_cookies (con todas las demás directivas de _cookies que definen tiempos de expiración .. y otros detalles que no suele ser necesario ajustar de lo que PHP trae por defecto).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 16/05/2004 a las 07:57
  #9 (permalink)  
Antiguo 17/05/2004, 11:30
Avatar de alucard3003  
Fecha de Ingreso: abril-2004
Mensajes: 148
Antigüedad: 20 años
Puntos: 0
una ultima pregunta....

bueno el session como su nombre lo dice es para crear sessiones logins esas cosas sobretodo, almenos como lo uso yo. mi problema como pensaras es el SID, si por ejemplo en mi pagina tengo secciones de acceso para todos y solo uso el session para areas restringidas pero si estoy en un area restringida la url seria por ejemplo
www.pag.com/pag.php?session_name()."=".session_id()

pero si paso aa una pagina normal
www.pag.com/libros.php
ahi no necesito el session_name()."=".session_id()
pero se de ahi quier pasar a
www.pag.com/notas.php
puedo poner el ?session_name()."=".session_id() y se va amantener el mismo ID? es q no se ya q yo lo hacia como viste por cookies...

Y una ultima pregunta para comprobar q un usuario estab logeado tanto si es por login o por get haria esto:
$id=$_get[sesion];
if (($_SESSION['masterlogin']==true or session_id()==$id) AND isset($_SESSION['name'])){

estaria bien? si em han entendido claro esta... ^^!
__________________
X
  #10 (permalink)  
Antiguo 17/05/2004, 11:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. yo no me complico con el SID .. dejo a PHP que lo propage en cookies (session.use_cookies = 1 o mejor todavía: session.use_only_cookies =1) y desactivo session.use_trans_sid =0

Esto me obliga (a mi y a mis "usuarios") a disponer de un navegador que acepte cookies .. pero gano en seguridad al no propagar el SID en link que "podrían" salir fuera de mi sitio (ejemplo . .un link que pones en un chat .. que envias por e-mail .. etc).

Si propagas el SID de forma manual (no por cookies) .. si en algún punto "te dejas" el SID sin propagarlo (ejemplo en esas páginas que no requieres del uso de esas variables de sesión) .. vas a perder el SID si pretendes volver a las páginas que si lo requieren (de uso de sesiones). Por ende .. el SID debes propagarlo siempre (sea manualmente como lo haces o dejando a PHP que lo haga en una cookie y olvidarte del SID) y . .ya validaras el estado o existencia de alguna variable de sesión en las pàrtes o páginas completas que lo requieran en función del valor o existencia de alguna de esas variables que viajan en tu sesión.

Este tipo de validaciones ..
if (($_SESSION['masterlogin']==true or session_id()==$id) AND isset($_SESSION['name'])){

las puedes resumir en:
Código PHP:
if (isset($_SESSION['masterlogin'])){
// sesión válida ..

El SID es único para cada cliente que la inicia .. así que no me preocupo de ver otras variables de sesión . .SI se crearon "asumo" que pasó mi validación anterior .. Y sigue usando el mismo SID que inició mi primer session_start() que inició en alguna de las páginas de mi sitio (o tras autentificarse).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 17/05/2004, 12:03
Avatar de alucard3003  
Fecha de Ingreso: abril-2004
Mensajes: 148
Antigüedad: 20 años
Puntos: 0
entonces mas facil obligo a mis usuarios a tener cookies activados y solo bastaria con tener el session_start en las paginas donde valla usar los $_session y doy por dado q se propaga el SID automaticamente, no? para eso debo preguntar a mi servidor si lo hacer segun entendi....ok a preguntar muchas gracias por la paciencia
__________________
X
  #12 (permalink)  
Antiguo 17/05/2004, 12:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No tienes que preguntar nada a tu ISP .. tan sólo miralo tu mismo:

Código PHP:
<?
phpinfo
();
?>
fijate en:
session.use_cookies = (si está a 1 .. ya propagas el SID en cookeis)

además .. esa configuración se puede "forzar" en tiempo de ejecución ( ini_set() ) o en .htaccess .. así que sólo depende de tí si quieres usar la propagación del SID en cookies de usarla y .. por supuesto avisar a tus usuarios que el sistema requiere que las usen.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 17/05/2004, 12:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El hecho de propagar el SID en cookies no debería ser una cuestión de "comodidad" o "desconocimiento" de como funcionan las sesiones o de como ahorrarte unas "teclas" al escribir tu código sino una justificación sobre seguridad de tu aplicación.

PHP.net recomienda propagar el SID en cookies .. y bajo mi punto de vista me parece seguro ese método con los problemas que tiene sobre si un usuario no acepta cookies .. Pero si avisas .. no tendrías que tener problemas de ningún tipo.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 17/05/2004, 12:36
Avatar de alucard3003  
Fecha de Ingreso: abril-2004
Mensajes: 148
Antigüedad: 20 años
Puntos: 0
Umm....y como podria "forzarloW como dices, es q no puedo saber al configuracion porq el portal se va a instalar en un server al cual voy a tener acceso recien ese dia
__________________
X
  #15 (permalink)  
Antiguo 17/05/2004, 14:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Menicioné ya como se fuera la configuración de php:

ini_set()
www.php.net/ini_set

Y no es el único método .. y tampoco con esa función o método se pueden ajustar -todas- las propiedades de PHP (directivas) .. pero las que nos implica en este caso sobre el uso de sesiones y propagación del SID .. SI.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #16 (permalink)  
Antiguo 17/05/2004, 14:50
Avatar de alucard3003  
Fecha de Ingreso: abril-2004
Mensajes: 148
Antigüedad: 20 años
Puntos: 0
umm...a ver veamos....entonces solo en la pagina donde hago la comprobacion y defino mis variables de session antes de defenirlas pondria:

ini_set(session.use_cookies,1);
__________________
X
  #17 (permalink)  
Antiguo 17/05/2004, 15:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Tienes que usarlo en todo el sitio que use sesiones antes de session_start() .. Dicho "ajuste" sólo tiene validez para el script en curso .. así que hay que hacerlo en todo script (o bien usas la alternativa de crear eso mismo bajo un .htacces en el servidor).

Los parámetros van entre comillas . .NO son constantes:

Código PHP:
ini_set("session.use_cookies","1"); 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #18 (permalink)  
Antiguo 17/05/2004, 15:25
Avatar de alucard3003  
Fecha de Ingreso: abril-2004
Mensajes: 148
Antigüedad: 20 años
Puntos: 0
ok ok aprendo aprendo...pero ahora se me vinieron a las cabeza dudas antiguas...para usar la funcion email tambien necesito activadas alguans opciones en el php.ini
podria hacer lo mismo?
y otra cosa para esto:
upload_max_filesize "2M"
file_uploads "1"
post_max_size "8M"
Puedo aumentarlo a mi antojo? Aunq ahora q recuerdo de todas formas tendria el limite del servidor....no se
__________________
X
  #19 (permalink)  
Antiguo 17/05/2004, 16:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si te fijas en la documentación oficial de ini_set() verás ahí cuales directivas de php puedes controlarlas por ini_set() y cuales no ..

Por ejemplo .. esas últimas que mencionas no se pueden controlar por ini_set() ... (las del tema del Upload de archivos al servidor).

para el tema del e-mail (mail() ) . .tu servidor (si es un servicio de hosting) ya estará configurado para usarla (ya tendrá en su SMTP = .. su própio servidor SMTP o bien usará sendmail que suele ser lo típico ..). Podrías (para este caso) cambiar la directiva SMTP y usar tu própio servidor SMTP (tendrías que indicar la IP/dominio donde esté corriendo ese servidor SMTP concreto bajo un ini_set() en tu caso).


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #20 (permalink)  
Antiguo 17/05/2004, 16:22
Avatar de alucard3003  
Fecha de Ingreso: abril-2004
Mensajes: 148
Antigüedad: 20 años
Puntos: 0
:o ok
parece q me emocione con lo del ini_set()
pero bueno entonces para resumir la leccion, como no se si los cookies esten activados para propagar la session antes de cada session_start por cada pagina debo hacer el:

ini_set("session.use_cookies","1");

y lo del mail preguntaba porq mis scripts los pruebo aca en casa y yo instale el php pero no lo configure y si lo configure fue para q funcione en mi pc, pero nada del mail...
por eso q cuando implemente lo del mail me dio error y me salio un mensaje quetenia q contactarme con el amdin apra ver los permisos y esas cosas, opr eso pense q era restringido ya q de modo casero no funcionaba menos aun otro servidor, pero al parecer la mayoria lo tiene configurado como q si, de todas formas voy a ponerlo dentro de mi instalador e indicarlo como $mail=1 o 0 y segun eso un if para q envie, creo q seria la mejor opcion
__________________
X
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 10:04.