【问题标题】:using sessions to pass http_referer php使用会话传递 http_referer php
【发布时间】:2026-01-17 21:55:02
【问题描述】:

这是考验:

关于index.php

<?php
    session_start();
    $url = $_SERVER['HTTP_REFERER'];
    $_SESSION['abc'] ='$url';
?>

我在页面$_SERVER['HTTP_REFERER']; 上回显,我得到了我想要的

稍后在现场我有一个预订页面,我使用会话来

<?php 
    session_start();

    if (isset($_SESSION['abc'])) {
        echo $_SESSION['abc'];
    } 
    else {
        echo 'error';
    }               
?>

它回显了错误,我很困惑为什么数据没有通过..

任何想法都来自 php 大师,谢谢。只想让它打印HTTP_REFERER

【问题讨论】:

  • 所有页面都调用了 session_start() 吗?因为你在现场说..“稍后”。
  • 在第二页尝试print_r($_SESSION)。在index.html 中,将$_SESSION['abc'] = '$url' 替换为$_SESSION['abc'] = $url
  • @bsdnoobz:为什么要在$url 周围加上引号?不需要引号。
  • 我必须在每一页上调用 session_start() 吗?或者只是在我想使用 $_SESSION superglobal 的页面上
  • 您需要在要访问会话数据的每个页面上调用 session_start()。启动会话后, session_start() 只会恢复之前启动的会话。

标签: php session http-referer


【解决方案1】:

查看 cmets,您似乎同时使用 HTTP HTTPS。

您需要将会话 ID 从 HTTP 传递到 HTTPS。

index.php

<?php
    session_start();

    $_SESSION['abc'] = $_SERVER['HTTP_REFERER'];

    $session_id = session_id();
?>

然后您需要将$session_id 传递到您的预订页面,可能是通过 GET:

reservation.php

<?php
    session_start();

    session_id($_GET['session_id']);

    if (isset($_SESSION['abc']))
        echo $_SESSION['abc'];
?>

【讨论】:

  • 非常感谢!我现在唯一的问题是,我在预订页面之前将引用者作为页面,而不是最初的 HTTP_REFERER,所以它回显了“mysite.com/pagebeforereservation”我如何让初始 HTTP_REFERER 转移过来?
【解决方案2】:

不幸的是,默认情况下,会话不会在 HTTP 和 HTTPS 之间持续存在。我不会重新讨论解决方案,而是指出问题出现在哪里:

【讨论】: