Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法使http\u referer保持会话状态_Php_Wordpress_Session Variables_Http Referer - Fatal编程技术网

Php 无法使http\u referer保持会话状态

Php 无法使http\u referer保持会话状态,php,wordpress,session-variables,http-referer,Php,Wordpress,Session Variables,Http Referer,我已经找了几个小时,找不到这个问题的答案 我正在尝试将引用url添加到电子邮件消息(访问者在网站上发送的表单),以便我可以知道访问者是从哪个网站引用的。(正在进行的分析的一部分) 我正在尝试将服务器[“HTTP\u REFERER”]设置为这样的会话 if(!isset($_SESSION["inbound"])) { $_SESSION["inbound"] = $_SERVER["HTTP_REFERER"]; } 但每次加载另一个页面时,会话都会不断更改。我猜是把枪放进去了!

我已经找了几个小时,找不到这个问题的答案

我正在尝试将引用url添加到电子邮件消息(访问者在网站上发送的表单),以便我可以知道访问者是从哪个网站引用的。(正在进行的分析的一部分)

我正在尝试将服务器[“HTTP\u REFERER”]设置为这样的会话

if(!isset($_SESSION["inbound"])) { 
    $_SESSION["inbound"] = $_SERVER["HTTP_REFERER"];
 }
但每次加载另一个页面时,会话都会不断更改。我猜是把枪放进去了!在此之前,isset将告诉它已经有一个会话,并且不再尝试添加它

我也尝试过这种方式(以及其他方式的组合):

我在WordPress上这么做,但我认为这不应该成为一个问题。我以前在Wordpress中使用过多次会话,没有任何问题

非常感谢您的任何建议或帮助! 谢谢 Eoin

更新:您已经这样尝试过了:

function get_ref_session() {
    if(!isset($_SESSION["inbound"])) { 
        $the_referer = $_SERVER["HTTP_REFERER"]; 
        $_SESSION["inbound"] = $the_referer; 
    }
}
add_action( 'wp_head', 'get_ref_session' );
这样也没有乐趣:(

在plugin和functions.php中尝试了这一点,没有乐趣。(在顶部)


Wordpress默认情况下不使用PHP会话。它直接设置Cookie来管理自己的会话。 在发送任何标题信息之前,您需要包括
会话_start();
。否则将不会保存任何会话数据


经过一番更深入的挖掘,发现它对阻止会话正常工作的页面进行了缓存

当登录到wordpress会话时工作正常,但当注销(所有访问者都将是)时,它们就不工作了


我想我必须考虑用cookies来做这件事。

使用$\u服务器[“HTTP\u REFERER”]时也请小心,它并不总是可用的,用户可以更改它。我在顶部有session\u start(),但没有乐趣:(是的,http_referer不是100%,但它会完成这项工作。在顶部?你是说在函数的顶部,在init hook期间运行,就像OP建议的那样..对吗?只是为了添加到上面..我有另一个会话,它从$_GET[''获取其值),它在同一个站点上运行得很好。我100%确定,但是http\u referer one,它似乎更像是if(isset)的问题。它就像被忽略了一样。您正在检查$\u会话[“inbound”],但设置$\u会话[“origURL”]。也许就是这样?在您的第一个代码示例中,您将键
inbound
origURL
混合在一起。请再次确认这不是您的问题。(我发现在类似的情况下使用常量很有帮助。)
function get_ref_session() {
    if(!isset($_SESSION["inbound"])) { 
        $the_referer = $_SERVER["HTTP_REFERER"]; 
        $_SESSION["inbound"] = $the_referer; 
    }
}
add_action( 'wp_head', 'get_ref_session' );
function register_session(){
    if( !session_id() )
        session_start();
}
add_action('init','register_session');
function register_session(){
    if( !session_id() )
        session_start();
}
add_action('init','register_session');