【问题标题】:Is there a way to make a page inaccessible when writing it on the address bar? [PHP, CodeIgniter]在地址栏上写页面时,有没有办法使页面无法访问? [PHP,CodeIgniter]
【发布时间】:2017-11-10 05:53:51
【问题描述】:

在地址栏上写页面时,有没有办法使页面(例如base-name/admin/cars)无法访问?我需要通过单击站点中某处的链接使其可访问。这可能吗?我不知道该尝试什么,并且已经搜索了一段时间但一无所获。

【问题讨论】:

  • 您可以在必须点击链接的页面上设置会话变量,然后检查
  • 您可以使用一次性令牌来做到这一点
  • 发布或会话变量。获取不起作用。
  • 使点击事件创建一个会话。如果未设置会话,则使用 header('LOCATION:whereYouWantTheRedirect.php'); die; 重定向
  • 如果只有一页有链接,您可以只使用$_SERVER['HTTP_REFERER']。如果它是多个页面,则很难维护,并且发布/会话会更容易

标签: javascript php codeigniter


【解决方案1】:

您可以检查http referrer,如果为空,则不显示页面或重定向它们。请参阅以下两个 Stackoverflow 页面:

如何查看推荐人: Checking the referrer

referrer 何时为空: In what cases will HTTP_REFERER be empty

【讨论】:

    【解决方案2】:

    这可以通过多种方式实现,就像你的想法一样

    1. 使用会话。

    由于有人输入了 url.com/this-page ,您不希望此页面被打开,除非用户未登录。 您可以做的是,在页面顶部,您只需要检查会话值。如果设置了会话,那么它就可以了,否则它应该被重定向到主页。

    示例 这个页面.php 假设在 CI 中,我制作了一个通用帮助文件,它将检查所有相应页面的会话。

    function isUser() 
    {
        $CI = & get_instance();
        if (isset($CI->session->userdata['User'])) 
        {
          //logged in your stuffs.
        }
        else
        {
          //redirect('login-page');
        }
    }
    
    1. 网址编码。

    通过在链接中通过编码发送时间和唯一 id 参数。通过打开该链接,唯一 ID 将被解码,直到它不会被打开。

    假设可能的链接可以是

    url.com/this-page/123456abcdef
    

    您需要在此页面上做的是,您需要检查给定 URL 链接上的 id 并对其进行解码。如果编码和解码得到正确的值,则页面有效。确保 id 应该保存在任何地方,以便您可以跟踪和解码它。

    $unique_id = base64_decode($id);
     if($unique_id!=''&& $time!='')
    {
      $cur_time = time();
      if ($cur_time - $time < 10800) 
      {
        //valid link
      }
      else
      {
         //link has been expired
      }
    }
    else
    {
      // link has been broken.
    }
    

    【讨论】:

      【解决方案3】:

      我会这样做:

      document.getElementById('yourLinkId').onclick = function(e){
        // ajax should be here to send simple parameter - we'll call it granted:'yes'
        // upon success - location = 'theRestrictedPage.php'; - yup just like that
        e.preventDefault();
      }
      

      现在您要限制的页面中的 PHP

      <?php
      session_start();
      if(!isset($_POST['granted']) || $_POST['granted'] !== 'yes'){
        header('LOCATION:thePageAboveTheLinkWasOn.php'); die;
      }
      // if it passes condition page is accessible
      
      /* if you want to force a click to happen again
      unset($_SESSION['granted']);
      */
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-26
        • 2018-06-23
        • 2010-09-26
        相关资源
        最近更新 更多