使用PHP会话验证年龄

时间:2011-02-15 21:31:36

标签: php session

我实施了一个年龄验证系统,用户只有在检查主页上的“我是21”复选框时才能查看网页。

我这样做是为了在选中框时设置一个PHP会话变量。然后对于所有的php网页,我的代码会检查以确保设置“我是21”会话变量。

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

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

2 个答案:

答案 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文件中。

此方法可用于多种文件。