【发布时间】: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'];
或
使用会话 - 有人知道怎么做吗?
【问题讨论】:
使用带有 url 的 $_GET 方法在页面之间传递变量是否是一种好方法:
<a href="input_obj.php?id='$id'&method=plain
并使用以下代码将其放入文件 input_obj.php 中:
$id = $_GET['id'];
$method = $_GET['method'];
或
使用会话 - 有人知道怎么做吗?
【问题讨论】:
这实际上取决于您的需求,例如,如果您在页面之间传递搜索参数,并且变量应该是持久的并且对最终用户可用(例如通过书签),那么将它们传递到URL(但通常不要像 $id 在 "input_obj.php?id='$id'&method=plain 中那样使用引号)
如果您确实在脚本之间传递内部变量,最好通过$_SESSION 变量来完成。请记住,最终用户可以轻松修改通过 URL 传递的变量。除非它们是供最终用户使用的,否则这可能是一个真正的问题。通过使用$_SESSION,您可以防止最终用户在需要隔离脚本变量时对其进行篡改。 (当然,除非变量是由其他用户通过 GET/POST/COOKIE 输入产生的)
//page1.php
session_start();
$_SESSION['id'] = $id;
//page2.php
session_start();
echo $_SESSION['id'];
【讨论】:
GET 变量是一种更好的方法。当您开始将变量放入会话中时,它可能会产生副作用,例如在浏览器之间复制/粘贴 URL 或尝试添加书签会打开不同的页面(因此这对 SEO 来说是一场噩梦)。此外,如果您开始集群您的服务器 b/c 您需要处理会话故障转移,它可能会变得复杂。
恕我直言,最好的解决方案是使用 mod_rewrite 来实现基于路径的变量...您会获得漂亮的 URL,并具有 GET vars 的所有好处。
【讨论】:
GET 是一种将变量传递到另一个页面的合理方式。
$_SESSION 和cookies 是另一种方式,但它不允许用户为页面添加书签。
POST 是另一种方式,但它需要表单提交,这需要用户干预或 javascript。
【讨论】:
这取决于数据的用途、类型和长度。通常,在查询字符串中传递变量就可以了。
请注意,在接受可变参数时,您需要验证它们是否符合您的预期。例如,我可以将 ?id=5 更改为 ?id=hello 并可能破坏您的应用程序。为了解决这个问题,我们可以将 ID 类型转换为整数:$id = isset($_GET['id']) ? (int) $_GET['id'] : 0;
【讨论】:
您也可以使用 cookie。这些是这样发送的:
setcookie(name, value, expire, path, domain);
您可以省略路径和域变量。这必须在标签之前声明。该名称只是您将获得它的名称。该值是将要返回的值,并且 expire 是 cookie 过期的时间(它以time() + $timeTillExpire 的形式写入,其中 timetillexpire 是您设置的变量或常量值)。这当然有限制,如果这个人有 cookie,它就不起作用。
你会得到一个 cookie:
$_COOKIE["name"];
并返回值
你做的方式很好。
【讨论】:
如果您只是在 PHP 脚本中使用变量,则实际上不需要“传递”它们。您可以全局创建一个变量并从另一个页面访问它。
【讨论】: