有没有办法在地址栏上写入页面时无法访问页面? [PHP,CodeIgniter]

时间:2017-11-10 05:53:51

标签: javascript php codeigniter

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

3 个答案:

答案 0 :(得分:1)

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

如何查看推荐人: Checking the referrer

引荐来源何时为空: In what cases will HTTP_REFERER be empty

答案 1 :(得分:0)

在很多方面,你可以想象,如

  1. 使用会话。
  2. 由于某人已输入url.com/this-page,您不希望此页面一直打开,除非用户未登录。 您可以做的是,在页面顶部,您只需要检查会话值。如果会话已设置则其正常,否则应将其重定向到主页。

    实施例 这-page.php文件 让我们说在CI中我已经制作了一个共同的帮助文件,它将检查所有相应的会话页面。

    function isUser() 
    {
        $CI = & get_instance();
        if (isset($CI->session->userdata['User'])) 
        {
          //logged in your stuffs.
        }
        else
        {
          //redirect('login-page');
        }
    }
    
    1. 网址编码。
    2. 通过编码链接在链接中发送时间和唯一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.
      }
      

答案 2 :(得分:0)

我会做这样的事情:

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']);
*/
?>