Php session 没有通过发送 headers 发送到其他页面

Php session are not being sent to other page by sending headers

Page1 
header("Location:Page2.php");
session_start();
$_SESSION['username']=$NOFCHILDREN;


Page2 
  session_start();
    $name=$_SESSION['username'];
  echo $name;

第 2 页显示错误 “注意:未定义的索引:用户名在” 这个问题有什么解决办法吗??

在 page1 中,按照以下代码放置代码

session_start();
$_SESSION['username']=$NOFCHILDREN;
header("Location:Page2.php");

您的代码在会话设置变量之前重定向。它不应该以这种方式工作。所以在会话集之后添加你的重定向。

最可能的错误来源是:

不接受会话 cookie

检查您的浏览器是否接受会话cookie。您可以在“应用程序”选项卡 (Chrome) 或“存储”选项卡 (Firefox) 中的开发人员工具中看到它。如果 PHPSESSID cookie 在每次请求时都发生变化,则不会接受会话 cookie。控制台选项卡中可能会打印详细信息。

总是在任何 session_start 调用之前调用 set_session_cookie_params。这样您就可以控制会话 cookie。

set_session_cookie_params([
    'lifetime' => 57600,
    'path' => '/',
    'domain' => 'example.com',
    'secure' => true,
    'httponly' => true,
    'samesite' => '', // or 'Strict' to make cross site attacks harder
]);

您也可以设置 INI options,尽管这是应用程序外配置,而且我发现让应用程序处理其会话 cookie 更容易。少出错。

玩饼干

使用curl或其他一些HTTP请求摆弄工具,您可以确认确实是浏览器干扰:

# Do a normal GET request to your first page, printing only headers.
$ curl -v -o /dev/null https://example.org/page1.php
[...]
< HTTP/2 200 
[...]
< set-cookie: PHPSESSID=xxx; expires=Mon, 04-Jan-2021 07:02:24 GMT; Max-Age=57600; path=/; domain=example.org; secure; HttpOnly; SameSite=None

# Do the second page request manually with the cookie copied from above output.
$ curl -b 'PHPSESSID=xxx' https://example.org/page2.php

其他可能的来源

这些真的只是幸运的猜测,无法访问您的系统:

  • 检查会话文件是否写入正确。 session_save_path 给你目录。那里有名称等于 PHPSESSID cookie 值的文件(再次检查开发人员工具或 curl)。
    • 它真的被写了吗?如果不是:检查目录的权限。
    • 是否写入了预期数据,但很快被 empty/other 数据覆盖?可能存在竞争条件,尽管您的两个简单脚本听起来不太可能。 Ajax 调用是竞争条件的候选者。
  • 如果您使用 files 以外的任何会话处理程序,则可能存在大量其他错误源。通过 ini_get('session.save_handler') 检查您使用的处理程序。