我实施了一个年龄验证系统,用户只有在检查主页上的“我是21”复选框时才能查看网页。
我这样做是为了在选中框时设置一个PHP会话变量。然后对于所有的php网页,我的代码会检查以确保设置“我是21”会话变量。
所以这适用于我想阻止的任何php网页。但缺点是我必须将年龄块php片段添加到每个php文件的顶部,它不能用于任何非php文件。
所以我的问题是,无论如何我可以使用“我是21”会话变量来简单地阻止/允许访问整个目录吗?因此,我不必将年龄块放在每个PHP文件中,以便我可以阻止不是PHP文件的内容,例如PDF。例如,是否可以在.htaccess中访问PHP会话变量?
答案 0 :(得分:4)
您可以在cookie中设置它,然后添加一些httpd.conf和/或.htaccess规则来检查该cookie是否存在。像
这样的东西RewriteCond %{HTTP_COOKIE} !/IsOldEnough=1/ [NC]
RewriteRule ^.* http://www.disney.com
将(如果我的语法正确)将任何IsOldEnoughCookie未设置和/或不等于1的人带入并将其重定向到迪士尼站点。
答案 1 :(得分:1)
让PHP包装pdf。创建一个脚本,首先检查年龄变量是否在会话中,如果是,则加载pdf,mimetypes标题并将其输出到浏览器。如果会话值不存在,请发送位置标头以重定向。
define('PDF_PATH', '../pdf/path');
if(isset($_SESSION['age_enough']) && $_SESSION['age_enough']==TRUE){
$contents = file_get_contents(PDF_PATH . 'naughty.pdf');
header('Content-type: application/pdf');
echo $contents;
}else{
header('Location:http://www.yourdomain.com/tooyoung.php');
}
如果要阻止激活PDF阅读的某些插件,您可能还需要设置内容处置标题。根据您的网络服务器配置,您可能还需要将mimetype添加到.htaccess文件中。
此方法可用于多种文件。