如何避免已发送的标头并更改cookie相关设置

时间:2015-04-21 19:04:47

标签: php session header

我正在尝试创建一个函数来安全地为我的脚本启动一个新会话,并修改cookie设置。

这是功能:

public function sessionStart($sessID, $noCache)
    {
        session_start();

        if($noCache)
        {
            header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
            header("Cache-Control: post-check=0, pre-check=0", false);
            header("Pragma: no-cache");
        }

        // **PREVENTING SESSION HIJACKING**
        // Prevents javascript XSS attacks aimed to steal the session ID
        ini_set('session.cookie_httponly', 1);

        // **PREVENTING SESSION FIXATION**
        // Session ID cannot be passed through URLs
        ini_set('session.use_only_cookies', 1);

        // Uses a secure connection (HTTPS) if possible
        ini_set('session.cookie_secure', 1);

        session_name($sessID);

        // Finally start a new session.
    }

我已经尝试了所有'谷​​歌'给我看,但我仍然有关于标题的错误:

Cannot modify header information - headers already sent

有没有办法使我的功能有效?

亲切的问候!

1 个答案:

答案 0 :(得分:0)

此错误通常是由您在代码中重复session_start()引起的。

确保每个脚本只启动一次会话。实现此目的的一种方法是建立一个回声/记录系统,以便您可以看到该功能被击中的次数。

见这里:PHPaste Snippet

此外,在ini_set([...])之前添加session_start()内容可能是个好主意,因此您确保它在运行时的行为符合预期。