从URL中为内存中的所有页面保留一个变量

时间:2020-08-24 作者:user14055335

我下载了一个推荐人插件,效果很好。我创建了自定义链接,一切正常:

https://testsite.com/?r=ty5x

我有一个转换系统,告诉我有多少用户通过自定义链接访问我的网站

如果要在显示屏上查看与自定义链接关联的变量,只需执行以下操作:

<?php
if (isset($_GET[\'r\'])) {
    echo $_GET[\'r\'];
}
?>
问题在于,如果用户更改页面并返回主页,显然url会更改,那么如何在用户的整个浏览会话中保持变量r=在内存中

更新$\\u会话

如果在函数中。php我编写代码:

if (!session_id()) {
    session_start();
    $_SESSION[\'referrer\']=$_GET[\'r\'];

}
在头版。php,写入echo:

<?php
$ref=$_SESSION[\'referrer\'];
echo $ref;
?>
这很完美,但只要我更改页面,即使我激活了session\\u start,也看不到变量

第二页示例:

session_start();

$test = $_SESSION[\'referrer\'];

echo $test;
我还尝试按照以下示例进入$\\u会话:

function test() {
    global $hello;
    $hello = \'hello world\';
}
add_action( \'after_setup_theme\', \'test\' );
和echo:

global $hello;
echo $hello;
但没有结果

我只想有一种方法,一旦我从url r=中获得变量,我就可以在用户浏览网站的所有页面时存储它,我该如何做到这一点?

1 个回复
SO网友:Tom J Nowell

TLDR: Use a cookie

为什么不使用PHP会话这不是全局变量的用途,也不是它们的工作方式。全局变量允许您更改变量范围,以便它可以在任何地方生成,而不仅仅是在该文件/函数范围内。这与坚持无关。

要理解为什么,我们必须知道,与节点应用程序不同,每次请求页面时,PHP程序都是从空白板加载的。您可以存储所需的所有变量,但当页面输出完毕且请求结束时,所有内容都会被清除。

这意味着,当您向WP站点发出请求时,WordPress将从空白状态加载,当请求完成时,它将被卸载。没有变量或加载的代码在请求之间持续存在,它每一次都是全新加载的。

那么,如何在整个会话中保持某些内容

如果要在请求之间存储内容,可以使用以下选项:

将其存储在cookie中,然后通过用户元/帖子/自定义表将其存储在数据库中,外部存储,例如文件、对象缓存、远程API,将其放入HTML中,然后确保数据与下一个请求一起提交到站点(例如表单中的隐藏输入),因为您的用户没有登录,所以您应该使用cookie。如果您的用户已登录,则可以将转诊代码存储在user meta中。

如果您的用户登录到一个表单上,而您只需要填写该表单的参考代码,那么请将其放入一个隐藏的输入标记中,并在每个页面上重新打印。

相关推荐

SESSION_START():找不到存储处理程序‘mm’-会话在/Sites中启动失败

出现以下PHP警告问题:session\\u start():找不到保存处理程序“mm”-在/站点中会话启动失败找不到保存处理程序“mm”:保存处理程序:请参阅:我不知道这意味着什么:但我找到了一些解释它的文字:如果使用--with mm配置编译PHP,可以将会话模块设置为mm。此模块使用共享内存存储会话。如果希望在PI IP中实现自己的处理程序,请参阅session\\u set save handler函数。string session\\u name(string naine)session\\u