Php 站点范围内测试和响应登录状态的最佳实践

Php 站点范围内测试和响应登录状态的最佳实践,php,Php,我正在开发一个小型的、非常特定于应用程序的CMS。没有任何财务问题,内容也不太敏感(主要是管理艺术品之间的关系),因此安全性不是一个高优先级,但我们仍然使用一个登录系统,每个安装都有一组受控制的用户 入口页面有一个登录表单-success为用户将会话变量设置为用户表的PK,并重定向到任意视图页面。该变量还用于跟踪该用户所做的任何更改 我正在为所有页面自动添加一个小脚本,它只检查会话变量是否已设置-如果未设置,用户将返回登录页面。这是可行的,但看起来很笨拙——特别是因为我需要“豁免”登录页面,所以

我正在开发一个小型的、非常特定于应用程序的CMS。没有任何财务问题,内容也不太敏感(主要是管理艺术品之间的关系),因此安全性不是一个高优先级,但我们仍然使用一个登录系统,每个安装都有一组受控制的用户

入口页面有一个登录表单-success为用户将会话变量设置为用户表的PK,并重定向到任意视图页面。该变量还用于跟踪该用户所做的任何更改

我正在为所有页面自动添加一个小脚本,它只检查会话变量是否已设置-如果未设置,用户将返回登录页面。这是可行的,但看起来很笨拙——特别是因为我需要“豁免”登录页面,所以我使用了一个丑陋的小黑客,基本上是这样的:

if(!isset($_SESSION['user']) && strpos($_SERVER['PHP_SELF'], '/login.php') !== 0) {
    header('Location: /login.php');
}
上面的内容从实际脚本中简化了一点,但基本上演示了正在发生的事情

我想知道是否有这样一个既定的最佳实践-测试登录状态并在未设置该状态时重定向


tyia

您似乎在使用标准方法。但是,我不必在每个PHP页面中都包含这个脚本,而是让所有请求都通过一个负责安全性的index.PHP文件。这样,您就可以确定只有一个失败点:index.php文件

要实现这一点,如果您正在运行apache,则需要一个.htaccess文件:

<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} .*\.php$ RewriteRule ^(.*)$ /index.php?script=$1 </IfModule> 重新启动发动机 RewriteCond%{REQUEST_URI}.*\.php$ 重写规则^(.*)$/index.php?脚本=$1 或者,您可以定义一个函数,并将其包含在需要登录的每个页面的顶部:

// in security.php function require_login($redirect_to='/login.php) { if (empty($_SESSION['user'])) { header('Location: ' . $redirect_to); exit(); } } // and in your .php files except for login.php include_once 'security.php'; require_login(); //在security.php中 函数require_login($redirect_to='/login.php){ if(空($\u会话['user'])){ 标题('Location:'。$redirect_to); 退出(); } } //在除login.php之外的.php文件中 包括_once“security.php”; 需要_登录();
您可能还想测试会话中不仅设置了“用户”,而且还包括一些标识符(即ID)。

这正是我现在正在做的事情(我给出的示例已经缩减,自动预编程序正在用于其他内容,所以我只是在背驮着走)——您已经确认这是“标准的”,这基本上就是问题所在——谢谢你的快速回复。