2011-02-15 89 views
0

我实现了一个年龄验证系统,用户只有在主页上选中“我是21”复选框后才能查看网页。使用PHP会话进行年龄验证

他们这样做的方式是设置一个PHP会话变量时,他们检查框。然后为所有的PHP网页我的代码检查,以确保“我是21”会话变量设置。

所以这适用于任何我想阻止的php网页。但缺点是我必须将年龄段php片段添加到每个php文件的顶部,并且它不能用于任何非php文件。

所以我的问题是,无论如何,我可以使用“我是21”会话变量来简单地阻止/允许访问整个目录?所以我不必在每个PHP文件中放入年龄段,以便我可以阻止不是PHP文件的内容,例如PDF。例如,是否可以在.htaccess中访问PHP会话变量?

+0

21岁的人有什么特别之处? :) – bzlm 2011-02-15 21:38:34

回答

4

您可以设置它在Cookie,然后添加一些httpd.conf中和/或的.htaccess规则来检查该cookie的存在。喜欢的东西

RewriteCond %{HTTP_COOKIE} !/IsOldEnough=1/ [NC] 
RewriteRule ^.* http://www.disney.com 

这会(如果我的语法正确)采取任何人的IsOldEnoughCookie没有设置和/或不等于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阅读插件激活,您可能还需要设置内容处置标题。根据您的web服务器配置,您可能还需要将mimetype添加到.htaccess文件中。

这种方法可以用于众多的档案。