【问题标题】:Php session are not being sent to other page by sending headers通过发送标头不会将 Php 会话发送到其他页面
【发布时间】:2021-01-03 13:46:42
【问题描述】:
Page1 
header("Location:Page2.php");
session_start();
$_SESSION['username']=$NOFCHILDREN;


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

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

【问题讨论】:

  • 两件事:$NOFCHILDREN 定义了吗?你试过把header(..)放在第1页的末尾吗?
  • 是的,我确实尝试了所有可以尝试的方法,但仍然面临这个问题
  • 这很奇怪@Usman Haider ...我无法重现您的错误。它非常适合我
  • 在第 1 页中,将您的 session_start(); 移动到标题调用之前。

标签: php web web-development-server


【解决方案1】:

最可能的错误来源是:

不接受会话 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)。
    • 它会被写入吗?如果不是:检查目录的权限。
    • 是否写入了预期的数据,但很快被空/其他数据覆盖?可能存在竞争条件,尽管您的两个简单脚本听起来不太可能。 Ajax 调用是竞争条件的候选者。
  • 如果您使用除files 之外的任何会话处理程序,则可能存在大量其他错误源。通过 ini_get('session.save_handler') 检查您使用的处理程序。

【讨论】:

    【解决方案2】:

    在 page1 中,按照以下方式放置您的代码

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-07
      • 2023-04-01
      • 2013-05-15
      • 1970-01-01
      • 2015-01-10
      • 2014-11-08
      • 2014-06-09
      • 1970-01-01
      相关资源
      最近更新 更多