URL中的变量

时间:2014-12-14 07:59:36

标签: php parameter-passing

早上好,

我正在为客户建立一个网站,我遇到了一个很大的问题。我允许公共搜索,用户可以从下拉列表中选择搜索字段,然后在输入字段中输入搜索值。 SQL查询运行并发送retunrs结果。然后,未注册的用户可以通过单击视图来选择查看该特定用户的详细信息。现在显然点击视图(链接),他们将使用php重定向到另一个页面。

> <td><a href='http://localhost/mygiftsite/pub_list_view.php?user=<?php echo $user_id;?>'>View</a></td>

这会生成以下网址:http://localhost/mygiftsite/pub_list_view.php?user=1。然后,该页面显示该特定注册会员公开的所有列表。然后,未注册的用户可以通过单击任何字段来查看这些列表,并将其重定向到http://localhost/mygiftsite/pub_item_view.php?list=9

我的问题是,用户只需更改网址中列表变量/索引的值,即可查看隐私设置为私有的其他用户和列表的列表,不应允许这样做。只是为了澄清,该列表具有隐私字段而非用户。注册用户决定将列表保密或将列表公开。公共列表应该可以通过成员搜索访问,私有列表不应该显示。我阻止用户访问页面而不使用以下代码登录:

<?php
    session_start();
    if(!isset($_SESSION['userid'])){
        header("location: http://localhost/mygiftsite/login.php");
    }
?>

但我希望允许未注册的用户搜索和查看公共列表。请问您可以帮我解决这个问题。

  1. 是否有可能隐藏&#34;变量因此无法更改值?
  2. 如何通过简单地点击URL
  3. 来阻止用户简单地更改列表变量的值
  4. 如果他们只是通过更改网址来更改价值,我该如何保护用户的隐私?
  5. 我不想使用.htaccess方法,因为您仍然只需更改参数值。
  6. 我主要担心的是可以在地址栏中简单地更改参数。我该如何阻止这种情况发生?

1 个答案:

答案 0 :(得分:0)

您需要在每个私人页面中检查加载它的用户是否是已登录用户。 例如:

//keep logged user. Store in session during sign-in
$loggedUserId = $_SESSION['loggedUserId'];

//from URL GET parameter
$otherUserId = $_GET['userid'];
$listId = $_GET['list'];

if($loggedUserId==$otherUserId)
      //do something, allow access
else {
      //retrieve the list record based on $listId, get $isPrivate field

      //do something else, don't allow access
      if($isPrivate == true )
           header("location: http://localhost/mygiftsite/login.php");
}