【问题标题】:php sessions from one php page to another从一个 php 页面到另一个 php 页面的 php 会话
【发布时间】:2014-06-16 19:14:56
【问题描述】:

我是 php 会话的新手,我想将数据从 php 页面发送到另一个页面。在第一页我有这个代码:

session_start();
$statements="<p>{$actorName} {$verbDisplay} {$objectName}</p>";
$_SESSION['regName'] = $statements;
if(isset($_SESSION['regName']))
{
echo $_SESSION['regName'];
header("Location: http://localhost/moodle/blocks/tincanlrs/downloadlrs.php");
}

这里 isset 函数是 returnig true 并且一切正常。 在第二页我有这个代码:

session_start();
$statements = $_GET['regName']; 
header("Content-Type: plain/text");
header("Content-Disposition: Attachment; filename=lrs_statements.txt");
header("Pragma: no-cache");
echo $statements;
if (isset($_SESSION['regName']))
{
    echo "session";
}
else
{
    echo "no session";
}

当我打开 lrs_statements.txt 时,我有:
通知9C:\xampp\htdocs\moodle\blocks\tincanlrs\downloadlrs.php中的未定义索引:regName
没有会话。

为什么?我做错了什么吗?提前致谢

[编辑] 我测试了 session_start 并且会话正在开始但是当我测试 session_id() 我有不同的 id 而不是相同的 id。 当我在第二页顶部添加时:

session_start();
var_dump($_SESSION);exit();

我有这个输出:array(0) { }

【问题讨论】:

  • 你不需要这个 $statements = $_GET['regName'];试试 echo $_SESSION['regName'];
  • 为什么在第二页到达 $_GET? $statements = $_GET['regName'];
  • 基本调试:查看session_start()的返回值。如果会话无法启动,它将是布尔值 false。检查两个脚本中session_id() 的值。如果你得到不同的值,那么你有两个或更多不同的会话并且正在“丢失”你存储在其中一个中的值。
  • 你不应该在 header() 之前回显或输出任何东西,(与问题无关,但我想我会提到它)
  • 在第二页的最顶部输入session_start(); var_dump($_SESSION);exit(); 并使用输出编辑您的问题

标签: php session session-variables


【解决方案1】:

在您的第二页中,从 $_SESSION 访问您的会话,如下所示:$_SESSION['regName'];

$_GET 将保存请求 URI 中的所有名称/值对,例如之后的一切?在网址中

还有一点需要注意的是,如果您使用 isset() 进行检查,那么您将永远不会收到未定义的索引错误。

【讨论】:

    【解决方案2】:

    这条线失败了:

    $statements = $_GET['regName'];
    

    为什么会失败?因为这是您在第一页上重定向到的 URL:

    http://localhost/moodle/blocks/tincanlrs/downloadlrs.php
    

    这个URL中没有参数“regName”,所以访问$_GET会触发“未定义索引”通知。

    还有一件事:在第一页上,您正在回显内容,然后才添加另一个 HTTP 标头。这通常(有一个例外)会失败,因为使用“echo”会将所有当前标头发送到浏览器并不允许发送更多。例外情况是打开输出缓冲时,它允许混合这两个输出,但强烈建议不要依赖此功能,以防您的代码必须在不允许打开输出缓冲区的主机上运行。

    现在的问题是:您在第二页中的哪一行是第 9 行。如果我计算行数,我看到 echo "session"; 将是第 9 行,但这与您收到的错误消息不匹配.

    【讨论】:

    • 第 9 行是 '$statements = $_GET['regName'];'
    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 2019-03-09
    • 2015-06-02
    • 2017-04-08
    • 1970-01-01
    • 2017-02-01
    • 2016-12-01
    相关资源
    最近更新 更多