【问题标题】:passing variable between pages在页面之间传递变量
【发布时间】:2011-11-14 20:56:12
【问题描述】:

使用带有 url 的 $_GET 方法在页面之间传递变量是否是一种好方法:

<a href="input_obj.php?id='$id'&method=plain

并使用以下代码将其放入文件 input_obj.php 中:

$id = $_GET['id'];
$method = $_GET['method'];

使用会话 - 有人知道怎么做吗?

【问题讨论】:

    标签: php variables get


    【解决方案1】:

    这实际上取决于您的需求,例如,如果您在页面之间传递搜索参数,并且变量应该是持久的并且对最终用户可用(例如通过书签),那么将它们传递到URL(但通常不要像 $id"input_obj.php?id='$id'&amp;method=plain 中那样使用引号)

    如果您确实在脚本之间传递内部变量,最好通过$_SESSION 变量来完成。请记住,最终用户可以轻松修改通过 URL 传递的变量。除非它们是供最终用户使用的,否则这可能是一个真正的问题。通过使用$_SESSION,您可以防止最终用户在需要隔离脚本变量时对其进行篡改。 (当然,除非变量是由其他用户通过 GET/POST/COOKIE 输入产生的)

    //page1.php
    session_start();
    $_SESSION['id'] = $id;
    
    //page2.php
    session_start();
    echo $_SESSION['id'];
    

    【讨论】:

      【解决方案2】:

      GET 变量是一种更好的方法。当您开始将变量放入会话中时,它可能会产生副作用,例如在浏览器之间复制/粘贴 URL 或尝试添加书签会打开不同的页面(因此这对 SEO 来说是一场噩梦)。此外,如果您开始集群您的服务器 b/c 您需要处理会话故障转移,它可能会变得复杂。

      恕我直言,最好的解决方案是使用 mod_rewrite 来实现基于路径的变量...您会获得漂亮的 URL,并具有 GET vars 的所有好处。

      【讨论】:

        【解决方案3】:

        GET 是一种将变量传递到另一个页面的合理方式。

        $_SESSIONcookies 是另一种方式,但它不允许用户为页面添加书签。

        POST 是另一种方式,但它需要表单提交,这需要用户干预或 javascript。

        【讨论】:

          【解决方案4】:

          这取决于数据的用途、类型和长度。通常,在查询字符串中传递变量就可以了。

          请注意,在接受可变参数时,您需要验证它们是否符合您的预期。例如,我可以将 ?id=5 更改为 ?id=hello 并可能破坏您的应用程序。为了解决这个问题,我们可以将 ID 类型转换为整数:
          $id = isset($_GET['id']) ? (int) $_GET['id'] : 0;

          【讨论】:

            【解决方案5】:

            您也可以使用 cookie。这些是这样发送的:

            setcookie(name, value, expire, path, domain);
            

            您可以省略路径和域变量。这必须在标签之前声明。该名称只是您将获得它的名称。该值是将要返回的值,并且 expire 是 cookie 过期的时间(它以time() + $timeTillExpire 的形式写入,其中 timetillexpire 是您设置的变量或常量值)。这当然有限制,如果这个人有 cookie,它就不起作用。

            你会得到一个 cookie:

            $_COOKIE["name"];
            

            并返回值

            你做的方式很好。

            【讨论】:

              【解决方案6】:

              如果您只是在 PHP 脚本中使用变量,则实际上不需要“传递”它们。您可以全局创建一个变量并从另一个页面访问它。

              【讨论】:

              • 当然,全局变量不会在页面加载期间持续存在。
              • @rogerlsmith 我会试试你的建议。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-02-21
              • 2012-07-19
              • 1970-01-01
              相关资源
              最近更新 更多