php 变量 - 将变量传递到另一个 php 页面的最佳方式

php variables - best way to pass variables over to another php page

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

1。 PHP 会话数

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

它运行良好,但我担心的是,如果用户出于某种原因决定键入页面的 url 或进入他们的历史记录并访问 url 页面网站,则可能未设置 $_SESSION 变量,如果它期望用户从集合 route/path.

到达此页面

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

2。 URL通过

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

page1.php?postId={variable goes here}

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

传递变量的感觉如何

我的问题:

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

感谢您的宝贵时间。

这在很大程度上取决于您要做什么? $_SESSION 变量和 $_GET 变量在 Web 编程中的用途大不相同(尽管,是的,您可以强制在两者之间进行一些调整)。

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

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

会话

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

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

例如,当用户成功登录时,您需要通过某种方式在页面加载之间记住这一点:

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

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

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

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

GET

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

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

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

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

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

N.B. 不要将 敏感的 详细信息(例如 username/password)传递给 GET - 尤其是因为它们会出现在浏览器历史记录中!


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

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

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


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

例如给定一个有 10 个问题的测验...如果用户单击 link 将他们放到第 5 个问题,您检查他们是否已经回答了第 1-4 个问题,然后采取适当的行动取决于答案。