最简单的方法是使用会话变量和代码的单入口点。
如果单个 index.php 文件让用户浏览代码并根据需要显示输出,那么我只需使用会话对象中的变量将用户重定向到同一页面,直到它处于不同的状态。
您的代码中的某些内容,例如:
if ($_SESSION['in_combat'])
{
// redirect user back to the same page
}
else
{
// allow other action as requested by link clicked
}
应该做到这一点,如果会话设置为,true
那么任何操作都会将用户重定向回需要他们注意的页面,否则,它将允许他们根据他们单击的链接执行任何操作。
编辑:通过单点入口,我的意思是代码 ALL 在单个index.php
页面上运行,然后控制代码执行的进一步流程。该索引页面将检查各种会话变量,解释和执行各种POST
请求GET
等。在编写代码以确保用户只能执行他们应该执行的操作时,单点入口是您可以做的最好的事情。
编辑 2:首先,单一入口点是一种确保 PHP 按您需要执行的方法——这意味着您的所有 HTML 都通过单个 PHP 代码显示。我通常通过创建一个基本 index.php 页面来执行此操作,然后根据传递给它的变量来指导执行流程 - 无论它们是在会话中还是在发布/获取请求中。
虽然它可能并不总是最有效的方法,但我通常有一个 case 语句,它根据传递给代码的变量控制显示和执行的内容。
如果您已经设置了 MVC,那么这显然是控制向用户显示的页面的执行的地方 - 这显然是 index.php 页面本身。
至于$_SESSION
变量,现在很容易,将控制流放入 MVC 中,同时将触发它的代码嵌入到程序的执行路径中。我的意思是这样的控制流:
if($_SESSION['inCombat'])
{
// This is where you redirect the user to code that ensures that the user cannot get out of the combat sequence if they are in it already.
}
else
{
// Normal Flow of execution...
}
if($hasInitiatedCombat)
// or something like the following:
// if($_REQUEST['startCombat']==true)
{
// This is where the code execution path leads to when combat is initiated.
$_SESSION['inCombat']==true;
}
使用这个简单的代码,每当该人进入战斗(或其他)时,都会设置一个会话变量,TRUE
然后他们请求的任何页面链接都会检查此变量以确定执行什么代码。如果设置为,TRUE
则代码会自动执行以确保它们仍处于战斗阶段,而不是让它们简单地单击链接以退出当前代码执行路径并转到其他地方。