防止用户浏览其他页面

时间:2019-09-30 22:53:20

标签: php yii2

在这种情况下,我有2个用户,分别是Employee和Resident。

该员工在我们的网站上拥有一个帐户,他们可以在其中查看所有居民的文件,并且可以选择这些文件以便居民填写。

顺便说一句,居民在网站上没有帐户。他们填写上述文档的唯一方法是通过向他们发送包含API的电子邮件或通过将在现场提供给他们并具有Employee登录会话的设备的电子邮件。

一旦将设备分配给其他页面,我将如何阻止居民浏览其他页面(返回),因为员工无法始终监视居民的行为。

谢谢。

编辑:因此,我之前所做的是为这些用户设置了单独的帐户,但经过仔细考虑后,特别是在居民年龄太大而无法使用设备的情况下,无需为居民帐户。在居民和员工之间登录/注销只是为了填写文件,这会使流程加倍。

我在想保存像这样的会话是否不错 $session = $_SESSION['fillUp']; 每当员工选择一个文件供居民填写时,保存该文件(员工只能这样做)后,表格将要求该员工输入安全码,以便保存该文件并取消设置。会议。

在除文档页面之外的其他所有页面上都选中该会话,这会将住所重定向到文档,从而在填充文档时阻止导航。

// Check session 'fillUp' for every controller except controller sign
public function beforeAction($action)
{
   if (Yii::$app->controller->id != 'sign') {
      $session = Yii::$app->session;

      // session 'fillUp' contains the url of the document to be signed
      if ($session->has('fillUp')) {
         $this->redirect($session->get('fillUp'));
      }
   }
}

1 个答案:

答案 0 :(得分:0)

您将永远不会阻止人们使用浏览器的默认导航选项。无论是浏览器后退按钮,还是向下滑动以向后导航。我已经看到用户体验测试会话中的人滑动会错误地向后导航。

我们需要处理前一页中应该发生的后退导航,而不是试图锁门。让我们处理一下它可能发生的可能性。

您要实现的目标有两个。

第一个是停止浏览器缓存上一页。这意味着任何向后导航都会触发向服务器发送请求以获取信息。

我们可以通过在敏感页面的页面内容中添加页眉来停止此操作: 发送cache control: no-cachepragma: no-cacheexpire: -1标头。

第二部分是确定如果有人确实向后导航并且服务器再次收到对该页面的请求,该怎么办。

您当然希望在常驻页面的第一个匹配项上将会话标记为“常驻”。如果会话在会话中具有“居民”标记,则可以从此处选择显示警告,并带有指向其应访问页面的链接,或者直接将其重定向回它而无需交互。我个人认为带有链接的警告会更清楚,并且会避免造成混乱。