我的大多数页面都使用会话,但我切换到PDO并在每个页面的开头调用session_start()会导致传递标题的问题。我已经做了几个小时的研究,但仍然不清楚该怎么做。
编辑 - 我一直在做什么:注册/登录文档以及身份验证.php的第 1 行是 session_start();
,用户在注册/签名后访问的所有页面的第 1 行是require_once('auth.php');
我目前正在将用户 ID 传递给每个带有 $_SESSION['SESS_USER_ID'] 的页面
当他们注册/登录时,我像这样连接它: $member = $stmt_user->fetch(); $_SESSION['SESS_USER_ID'] = $member['user_id'];
在随后的每一页上,我都这样称呼它:
$user_id = $_SESSION['SESS_USER_ID'];
根据手册
从 PHP 4.3.3 开始,在会话后调用 session_start() 以前启动将导致级别 E_NOTICE 的错误。也 第二个会话启动将被忽略。
这是否意味着我不再需要在每个页面上调用它,只需在用户开始会话时调用它一次?
如果没有,处理此问题的最简单方法是什么?
如果您使用的是框架,则可能只需要在该框架中调用它一次。如果你的每个请求都转到不同的php页面,那么你需要确保每个请求至少调用一次(最好是尽快)。
你需要让自己成为一个引导程序文件。
一个文件,其中包含在每个页面上执行的所有常见操作 - 会话启动、连接到数据库、设置全局变量等。
然后将此文件包含在调用的每个脚本中。
因此,您将确保拥有所需的一切,但一次调用所有内容。
虽然我不明白这个问题与PDO(以及上一个)有什么关系。
PDO只是一个数据库驱动程序,与标头,会话等没有丝毫关系。
ob_start
和ob_end_flush
来缓冲输出,因此实际上可以这样做:
<?php
ob_start();
echo '42';
session_start(); // still works because output is buffered
ob_end_flush();
?>