首页 > 解决方案 > php 变量 - 将变量传递到另一个 php 页面的最佳方式

问题描述

所以我知道这两种在 php 页面之间传递变量的常用方法。

1. PHP 会话

我知道这$_SESSION是一个 php 全局变量,它可以在浏览器会话期间跨 php 页面保存变量。

它运作良好,但我担心的是,如果用户出于某种原因决定输入页面的 url 或进入他们的历史记录并访问网站的 url 页面,则可能不会设置 $_SESSION 变量,如果它期望用户从设定的路线/路径到达此页面。

此外,如果用户进入另一个页面,并且该页面将已定义的 $_SESSION 设置为另一个值,然后决定返回上一页,则 $_SESSION 变量对于该页面不正确,从而导致许多错误。

2. URL 传递

这是迄今为止我认为最可靠的。我对此唯一担心的是,页面可能会因长 URL 而变得相当混乱。

page1.php?postId={variable goes here}

传递 4,5 或 6 个变量可能会有点混乱,我还需要对它们进行编码或加密。URL 可能会变得相当长,我不确定我对跨 URL 传递变量的感觉如何。

我的问题:

将变量从一个 php 页面传递到另一个页面的最佳方法是什么。以上两种方法是最好的方法,还是我的另一种有效方法。此外,如果效率不是问题,那么最安全的程序/方法是什么。

谢谢你的时间。

标签: phpweb-deployment

解决方案


这在很大程度上取决于您要做什么?$_SESSION变量和$_GET变量在 Web 编程中很大程度上具有不同的用途(虽然,是的,您可以在两者之间施加一些影响)。

您需要问自己的问题是“是存储用户信息的变量还是指示网络服务器做某事”,如果是前者,那么$_SESSION如果是后者,则使用$_GET

例如,您不希望loggedon=true作为GET变量传递(忽略安全隐患),因为您必须更新页面上的每个链接以附加查询字符串,正如您所说,这会导致一些不整洁的 URL .

会议

最常用于存储有关用户的信息。一些例子:

  1. 登录状态
  2. 购物篮
  3. 会话首选项

例如,当用户成功登录时,您将需要某种方式来记住页面加载之间的内容:

session_start();
$_SESSION["loggedon"] = true;

在随后的每个页面请求中,您可以检查:

session_start();
if(!$_SESSION["loggedon"] ?? null){
    echo "ERROR: You shouldn't be here!";
    exit;
}

请注意,$_SESSION它只能由服务器访问,不能由网站用户直接访问,并且在会话关闭之前一直存在。

得到

另一方面,随每个请求一起发送,通常在您想要将非敏感信息从用户传递到网络服务器时使用。一些例子:

  1. 语言偏好
  2. 用户输入(例如使用搜索引擎时的搜索查询)
  3. 忘记密码安全代码

假设您有一个烹饪网站和 1000 个食谱。您可能只有一个页面来显示配方并GET在 URL 中传递一个变量来指示应该加载哪个配方

http://www.mycookingwebsite.com/recipe.php?recipeid=477

请注意,GET请求对用户可见,可以修改,也可以显示在历史记录等中。

注意不要传递敏感信息(例如用户名/密码)GET——尤其是因为它们会出现在浏览器历史记录中!


您提到将变量从一页传递到另一页。但我不太清楚你的意思是 Server->Server ( SESSION) 还是 Client->Server( GET)?

这一切结合在一起的一个例子是购物车:

在后端,您的会话中存储了一个数组,其中包含购物车中的项目,这在整个会话中都是持久的。在客户端,您可以发送GET(大多数人可能会POST)请求告诉服务器您要添加到列表中的新产品。


如果您主要担心用户可能会发现自己处于错误的“阶段”,那么我建议进行一些检查以确保他们在正确的时间出现在正确的位置。

例如,给定一个包含 10 个问题的测验......如果用户单击一个链接,将他们放在第 5 个问题上,您检查他们是否已经回答了第 1-4 个问题,然后根据答案采取适当的行动。


推荐阅读