0

我的大多数页面都使用 Sessions,但我正在切换到 PDO 并在每个页面的开头调用 session_start() 会导致传递标头出现问题。我已经做了几个小时的研究,但仍然不清楚该怎么做。

编辑-我一直在做的事情:注册/登录文档的第一行以及 auth.php 是session_start();,用户在注册/签名后访问的所有页面的第一行是require_once('auth.php');

我目前正在使用 $_SESSION['SESS_USER_ID'] 将用户 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 级别的错误。此外,第二个会话开始将被简单地忽略。

这是否意味着我不再需要在每个页面上调用它,而只需在用户开始会话时调用它一次?

如果不是,那么处理这个问题的最简单方法是什么?

4

3 回答 3

1

如果您使用的是框架,您可能只需要在该框架中调用它一次。如果您的每个请求都转到不同的 php 页面,那么您需要确保每个请求至少调用一次(最好尽快)。

于 2013-01-23T19:28:38.330 回答
0

你需要让自己成为一个引导文件。
在每个页面上执行的所有常见操作的文件 - 会话启动、连接到数据库、设置全局变量等
。然后将此文件包含到每个调用的脚本中。
因此,您将确保您拥有所需的一切,但只需调用一次。

虽然我不明白这个问题与 PDO 有什么关系(以及前一个问题)。
PDO 只是一个数据库驱动程序,与标头、会话等没有丝毫关系。

于 2013-01-23T19:47:38.890 回答
-1

您可以使用ob_startandob_end_flush来缓冲您的输出,因此您实际上可以这样做:

<?php
ob_start();
echo '42';
session_start(); // still works because output is buffered
ob_end_flush();
?>
于 2013-01-23T19:38:24.463 回答