在多个页面中重用会话变量

时间:2014-05-16 17:30:38

标签: php mysql

我通过链接从查询传递以下变量:

 <a href="middle.php?name=<?php echo $name;  ?>&id=<?php echo $id1;  ?>&rowid=<?php echo $rowid;  ?>&record=<?php echo $record;  ?>">

变量将传递到此页面:

session_start();

//$id = ($_GET['id']);
if (isset($_GET["record"])) {
    $_SESSION["record"] = $_GET["record"];
}
if (isset($_GET["id"])) {
    $_SESSION["id"] = $_GET["id"];
}
if (isset($_GET["rowid"])) {
    $_SESSION["rowid"] = $_GET["rowid"];
}
if (isset($_GET["name"])) {
    $_SESSION["name"] = $_GET["name"];
}
if (isset($_GET["store"])) {
    $_SESSION["store"] = $_GET["store"];
}

然后用户被重定向到这个页面,我试图使用会话变量分配给页面中的变量,如下所示:

session_start();

$id = $_SESSION[id];

$rowid = $_SESSION[rowid];

$name = $_SESSION[name];

$record = $_SESSION[record];

变量无法访问,因为我需要它们在此页面上。我错过了引号吗?再次使用会话变量的最佳方法是什么?

仅供参考,他们主要用于其他类似的查询:

"SELECT * FROM mgap_orders WHERE mgap_ska_id = '" . $_SESSION['id'] . "' AND mgap_status = 0 GROUP BY mgap_ska_report_category LIMIT 5";

1 个答案:

答案 0 :(得分:2)

  

我错过了引号吗?

是。你说你正在这样访问它们:

$id = $_SESSION[id];

那应该是这样的:

$id = $_SESSION['id'];

但更重要的是,为什么你需要在这里使用会话?您描述情况的方式是:

  1. 用户在链接中发出包含查询字符串值的请求。
  2. 在回复中,您将用户转发到另一个页面(可能是使用位置标题?)。
  3. 在最后一页上,值必须存在。
  4. 如果他们要查询字符串值,请将它们作为重定向中的查询字符串值。所以你可能会遇到这样的事情:

    header('Location: somePage.php');
    

    您可以包含以下值:

    header('Location: somePage.php?name=' . $name');
    
    其余值的

    等等,就像在为执行重定向的页面构建原始链接时一样。

    此外,虽然您没有显示您的数据访问权限,但您确实显示的查询似乎容易受到SQL注入攻击。最终,您使用的值来自用户输入(查询字符串),因此您不应将它们直接连接到SQL查询中。