session_start()方法位于Session.php类的构造函数中
每个页面标题中都需要Session.php类 (require_once('Session.php'))
这意味着当我重定向到另一个URL并每次启动新的会话时,将再次包含Session类。这将导致错误。
但是这段代码正常工作,为什么?
class Session {
private $signed_in = false;
public $user_id;
private $is_admin;
public $message;
public $count;
function __construct() {
session_start();
$this->visitor_count();
$this->check_the_login();
$this->check_message();
}
} //End of Session Class
$session = new Session();
为什么我应该在每次Session类初始化时开始新的会话
答案 0 :(得分:2)
您的问题是在代码中间调用session_start:
http://php.net/manual/en/function.session-start.php
注意:
要使用基于cookie的会话,必须在调用session_start()之前 将任何内容输出到浏览器。
请尝试将其放在文件开头,类声明之前或其他include中。
答案 1 :(得分:0)
我将从session_start
命令(听起来很傻,但熊)解耦会话类,以避免调用它的posiblity变得迷茫和/或福尔戈和/或在错误的时间调用(头后)。
如果您不使用框架,我可以假设你不是因为您选择处理会话直,那么我可能会选把session_start
调用在自定义自动加载文件加载在开始这每个请求。
类似这样的东西(假设您使用作曲家的自动排版机)
<强> custom_autoload.php 强>
<?php
session_start();
$loader = require __DIR__ . '/relative/path/to/vendor/autoload.php';
您知道这样,它的任何输出到浏览器之前被调用。然后,您的会话类可以负责处理$_SESSION
的内容,这应该是它的单项工作。
如果您不熟悉作曲家自动加载器,请参见this问答,以获取有关使用作曲器自动加载器的良好指导。