Foros del Web » Programando para Internet » PHP »

sesiones y httaccess, como?

Estas en el tema de sesiones y httaccess, como? en el foro de PHP en Foros del Web. Bueno.. el asunto es el siguiente; Tengo una pequeña pagina en la que tengo ciertas secciones restringidas, donde solo usuarios susbscritos a nuestra revista pueden ...
  #1 (permalink)  
Antiguo 17/11/2004, 18:29
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 13 años, 8 meses
Puntos: 11
sesiones y httaccess, como?

Bueno.. el asunto es el siguiente;

Tengo una pequeña pagina en la que tengo ciertas secciones restringidas, donde solo usuarios susbscritos a nuestra revista pueden accesar,, el dilema es que tengo una seccion para descargar pdf´s, Como hago para que solo las personas registradas puedan tener acceso a esta seccion,,, y que no venga alguien astuto y al ver la ruta donde estan almacenados los archivos y el nombre de estos decida entrar despues (sin autenticarse) a ver estos pdf´s...? bueno anteriormente todas las secciones del sitio se manejaban atravez de httacess,, pero ahora es en base a MySQL y PHP,,, habra algun modo de conectar httaccess y los datos de usuarios de MySQL para proteger esta seccion de ese modo????

de antemano gracias!
__________________
http://dev.wsnetcorp.com
  #2 (permalink)  
Antiguo 17/11/2004, 22:35
Avatar de ignacio_giri  
Fecha de Ingreso: febrero-2003
Ubicación: Argentina, Rosario
Mensajes: 585
Antigüedad: 14 años, 9 meses
Puntos: 0
desde ya olvidate de htaccess, el htaccess es para proteger una carpeta y no tiene nada que ver con pedir logueo para una pagina del sitio, usa esto.

<?php
include ("includes/session.php");
if( !session_is_registered( "email" ) && !session_is_registered( "passwd" ) ) {
header("Location: login.php");
exit;
}

fijate que email y passwd son los campos que yo pido... para que esten registrados...
__________________
Ignacio
  #3 (permalink)  
Antiguo 18/11/2004, 06:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
ignacio_giri (tomalo como una crítica constructiva)

El uso de las funciones de sesiones que haces está bastante anticuado .. deberías usar los arrays superglobales $_SESSION y verificar su existencia con funciones como empty() o isset() ... en lugar de "session_is_registered".

Por otro lado .. si hablas de un archivo que haces ahí con un "include()" deberías presentar el código que corresponde .. Para que se vea por ejemplo en ese caso que al menos necesita iniciar el uso de sesiones con: session_start() minimo.

------

Si redireccionas con header("Location: ") hacia el archivo .. en el URL se vé el link que quedó directo para descargar el archivo .. lo cual si bien "ocultará" donde están esos archivos a gente agena al sitio .. a los própios usuarios del sistema si en alguna ocasión les restringes el acceso .. igual podrían pasar por alto tus restricciones.


ebe ...

Para solventar el problema puedes hacer:

1) subir tus archivos fuera del "document_root". En un servicio de hosting común el "document_root" apunta al directorio /public_html/ y tiene un alias en /www/ .. se trataría de crearte un directorio por encia de este y ahí colocar tus archivos, de esta forma quedan fuera del acceso vía HTTP con una llamada directa por el URL tipo: http://www.tal.tal/archivos/tal.pdf

2) hace que PHP acceda al archivo por el sistema de archivos del servidor con rutas absolutas hacia el mismo y usando las cabeceras HTTP para componer el formato MIME y otros detalles sobre el archivo que vas a ofrecer para descargar o mostrar en línea (inline).

Para eso, .. puedes usar la función header() con las cabeceras HTTP correspondientes para indicar que el archivo es un "pdf" y la función readfile() para leer el archivo desde su ubicación "absoluta" (/home/sitio.tal/archivos/archivo.pdf) y entregarlo al buffer de salida de PHP (sería equivalente a un fopen() y afines más un "echo" al contenido que leas ..)

De esto tienes ejemplos en la documentación oficial de header() en el manual oficial de PHP:

www.php.net/header

Código PHP:
<?php

// tu validación de existencia de variables de sesión y otras variables que uses para validar.

// ruta absoluta a tu archivo pdf .. por supuesto puede ser variable .. esto es un ejemplo.
$pdf="/hombe/sitio.tal/archivos/nose.pdf";

// Definición del archivo que enviarás al "cliente".
header('Content-type: application/pdf');

// El nombre del archivo que verá el usuario al descargarlo.
header('Content-Disposition: attachment; filename="'.basename($pdf).'"');

// leer y  entregar el archivo al buffer de salida .. aquí se inciará la descarga o apertura de tu lector de PDF si lo tiene instalado tu usuario ..
readfile('original.pdf');
?>
Un saludo,
  #4 (permalink)  
Antiguo 18/11/2004, 09:53
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 13 años, 8 meses
Puntos: 11
excelente!!

Bueno,, que puedo decir,, excelente!!, algo que me suena mas logico; Ahora solo a probarlo y les cuento que tal corre todo. Gracias Cluster desde la capital Chapina...
__________________
http://dev.wsnetcorp.com
  #5 (permalink)  
Antiguo 01/12/2004, 17:02
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 13 años, 8 meses
Puntos: 11
Lo he intentado pero naahh!!

Bueno no se sie s que necesite alguna libreria adicional o algo asi??? pero no me corre y como se dice por ahi,, ya estoy para balasos, porque no.....
necesito recoger una variable enviada por $_GET y en base a eso abrir el archivo .pdf correspondiente,, lo estoy haciendo de esta manera -----
|
|
------------------------------------------------------------------
|
V

<?php
// tu validación de existencia de variables de sesión y otras variables que uses para validar.
session_start();
if(!isset($_SESSION["el_usuario"]))
{
header("location:../carpeta/registrese.php");
exit();
}
$pdf_i=$_GET['el_pdf'];
$pdf_i=addslashes($pdf_i);
$pdf_i=trim($pdf_i);
// ruta absoluta a tu archivo pdf .. por supuesto puede ser variable .. esto es un ejemplo.
$pdf=$_SERVER['DOCUMENT_ROOT']."../pdfs/".$pdf_i.".pdf";

// Definición del archivo que enviarás al "cliente".
header('Content-type: application/pdf');

// El nombre del archivo que verá el usuario al descargarlo.
header('Content-Disposition: attachment; filename="'.basename($pdf).'"');

// leer y entregar el archivo al buffer de salida .. aquí se inciará la descarga o apertura de tu lector de PDF si lo tiene instalado tu usuario ..
readfile($pdf);
?>

Podrian corregirme los errores que tenga porfavor????
Cluster, amigos, dejenlo brillar!!!

Gracias
__________________
http://dev.wsnetcorp.com
  #6 (permalink)  
Antiguo 02/12/2004, 05:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Deberías indicar que errores obtienes o que sucede ..

No sé si te llega a entregar el archivo para descarga (aunque se genere uno vació o si lo editas ahí veas algún error).

Lo otro que puedes hacer para ir evaluando de donde puede llegar el problema es:
1) Deshabilita (comenta) las líneas referentes a header().
2) haz echo a tus $pdf y demás varaibles y observa que el valor que ahí te dé es el esperado.

Pero lo mejor es que indiques que sucede exactamente al ejecutar tu código.

Un saludo,
  #7 (permalink)  
Antiguo 02/12/2004, 09:15
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 13 años, 8 meses
Puntos: 11
Aqui esta.

Baueno, se me paso por alto pero aqui va el mensaje que me da....
Al dar click en el enlace que envia la variable por _GET se abre la ventana de dialogo que me dice que quiero hacer con el archivo (guardarlo o abrilo con la aplicacion predeterminada) entonces digo abrir con aplicacion y abre al acrobat pero al terminar de abrir y supuestamente presentarme el archivo dice lo siguiente:

Acrobar no ha podido abrir '1585.pdf' debido a que no es un tipo de archivo admitido o esta dañado (por ejemplo, se envio como adjunto de correo electronico y no se codifico correctametne).

este archivo esta en la carpeta especifica y es totalmente legible....

Cual sera el problema?????

Gracias.
__________________
http://dev.wsnetcorp.com
  #8 (permalink)  
Antiguo 02/12/2004, 09:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Prueba en lugar de enviarlo como "attach" como "inline" .. es decir .. a forzar la visualización del archivo directamente (y luego tu decidiras si lo guardas en "local" o que haces con el). Por lo menos que sirva para descartar otros problemas referentes a la lectura del archivo.

Código PHP:
header('Content-Disposition: inline; filename="'.basename($pdf).'"'); 
Un saludo,
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 18:18.