@naggety
Estuve probando, y si bien el método funciona, veo que se pone un poco inestable con los pdf.
Pero encontré otro método, creo que más funcional.
Lo primero que dejo en claro, es que el usuario tiene que tenr instalado el plugin de AdobeReader, si no siempre va a querer decargar el archivo
Como dijiste que tenés un sistema de loguin, voy a usar sesiones para el ejemplo
Por un lado tenes la página del loguin, que contra la validación de usuario y contraseña va a hacer algo asi
login.php (yo doy por hecho que se logueo y se creo la sesion pdf = logueado)
Código PHP:
Ver original<?php
$_SESSION['pdf'] = "logueado";
?>
<!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>
<title>titulo</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<p>En un link<br />
<a href="pdf/pdf.php?archivo=Sqlite">ver pdf</a>
</p>
<p>Cargando en un iframe<br />
<a href="pdf/pdf.php?archivo=Sqlite" target="visor">ver pdf</a>
</p>
<iframe name="visor" width="600" height="400" src="about:blank"></iframe>
</body>
</html>
Los links apuntan a un archivo pdf.php que lleva por parametro archivo=xxx, xxx es el nombre del archivo sin la extension (en el ejemplo, Sqlite)
pdf.php
Código PHP:
Ver original<?php
if(isset($_GET['archivo'])){ $archivo = $_GET['archivo'];
}else{
$archivo = "noexiste";
}
if(isset($_SESSION['pdf'])){
if($_SESSION['pdf'] == "logueado"){
$fichero = "/$archivo.pdf"; // aqui la ruta a la carpeta con todos tus pdf
header('Content-Type: application/pdf'); header('Cache-Control: must-revalidate'); }else{
echo "Archivo inexistente";
}
}else{
echo "No permitido";
}
}else{
echo "No autorizado";
}
?>
Le puse algunas condiciones extras para que veas como trabaja.
Usa readfile() que lee un archivo desde una ruta en el disco, vale decir que si querés más seguridad podrias poner tus pdf por fuera del documentRoot (es decir una carpeta no accesible desde el navegador)
Para el ejemplo tambien cree un archivo sinsesion.php, este en realidad crea una sesion, pero con otro valor, para forzar el error.
Vale decir que tus usuarios nunca abren el pdf directamente, sino un php que lee el pdf y lo muestra, sólo si hay sesion con un valor que vos determinas (sesion que tendrás que crear tras validar usuario y contraseña)
Podes reforzar más aún la restricción, evitando que los pdf se guarden en la cache del navegador, para eso en la carpeta donde esta pdf.php (pdf, en el ejemplo) hay un .htaccess con
Código Apache:
Ver originaladdType "application/pdf" .pdf
<FilesMatch "\.(pdf)$">
Header unset Cache-Control
Header unset Expires
Header unset Last-Modified
FileETag None
Header unset Pragma
</FilesMatch>
Demo
http://foros.emprear.com/proteger_pdf
Saludos