【问题标题】:Storing variables across pages with no sessions PHP在没有会话 PHP 的情况下跨页面存储变量
【发布时间】:2019-05-25 20:31:03
【问题描述】:

我正在编写一些用于与 XML 进行机器对机器通信的代码。连接的设备将不支持会话。我需要在不支持会话的情况下跨页面工作的 PHP 变量。

我在几个地方用过

file_put_contents($file,$content)

这行得通,但是当我完成后,这会导致大量磁盘读写

进一步阅读 php://fd 和 php://temp 的 php 手册,我无法让它工作。 https://php.net/manual/en/wrappers.php.php

我已经尝试了很多方法,但不明白它是如何工作的。此外,其中一些方法一旦被阅读就会失去意义。我知道一旦我将它作为变量读取,我就可以将其重新写入 php://temp 或 php://fd 以供以后在另一个页面上使用。

也许有更好的方法来做我需要的事情?

我正在接近每页 10 次磁盘访问,这肯定会减慢所有速度。每个磁盘访问都有一个关于单词长度的字符串,因此读写磁盘似乎很疯狂

【问题讨论】:

  • “连接的设备不支持会话”是什么意思?会话是服务器/php 功能,而不是客户端功能。请edit您的问题包括您想要做什么的详细描述。
  • 我反复测试了 php 会话。我让每个页面都写出它们没有保存的会话变量 abd。我记得会话依赖于 cookie,如果未存储 cookie,则会话丢失。我不再希望诊断会话问题,因为这些不是网络浏览器,它们的行为不同。

标签: php temp


【解决方案1】:

问题似乎是有问题的用户代理不支持cookies(正如你所说,它们不是网络浏览器),而不是它们不支持“会话”。 会话毕竟是托管在服务器端的。

...会话依赖于 cookie 如果未存储 cookie,则会话丢失。

会话不需要使用 cookie。关于会话,cookie“仅”用于传播“会话 id”。使用 cookie 是执行此操作的默认、首选和最安全的方法,但它不是唯一的方法。

“会话 ID”(存储为 SID 常量的一部分)可以作为 URL 参数或 POST 数据传递。

配置设置session.use_cookiessession.use_only_cookies 可以被禁用(即设置为“0”),这样PHP 甚至不会尝试设置会话cookie。然后,您可以启用session.use_trans_sid(即设置为“1”),以便 PHP 自动重写 URL 以包含必要的“会话 id”或手动使用 SID 常量来构建您的 URL。

当 PHP 在 cookie、URL 参数或 POST 数据中收到会话 ID 时,它将在调用 session_start() 时恢复会话。不需要 cookie。

参考:


我每页大约有 10 次磁盘访问,这肯定会减慢速度。

每个页面请求 10 次磁盘访问实际上并没有那么多,而且不太可能影响性能。默认的 PHP 会话处理程序使用“文件”,因此这也会导致磁盘访问,尽管如果数据很小,我认为每个用户会话可能只有 1 个。

【讨论】:

    猜你喜欢
    • 2011-07-31
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2020-10-13
    • 2014-09-20
    • 1970-01-01
    相关资源
    最近更新 更多