php如何决定是否发送会话cookie

时间:2014-02-11 18:38:51

标签: php session cookies kohana-3.3

我第一次访问了我的网站,我看到了服务器设置的会话cookie。我正在重新加载页面,我看到只有我的浏览器将会话标识符发送到服务器,而服务器不返回会话cookie。我正在使用Kohana框架。我想知道这是否是本机PHP行为,如果请求已经拥有它并且它没有过期或者这是由框架处理,则不发送会话cookie?

我发现下面的一段代码可以说是神奇的:

protected function _read($id = NULL)
    {
        // Sync up the session cookie with Cookie parameters
        session_set_cookie_params($this->_lifetime, Cookie::$path, Cookie::$domain, Cookie::$secure, Cookie::$httponly);

        // Do not allow PHP to send Cache-Control headers
        session_cache_limiter(FALSE);

        // Set the session cookie name
        session_name($this->_name);

        if ($id)
        {
            // Set the session id
            session_id($id);
        }

        // Start the session
        session_start();

        // Use the $_SESSION global for storing data
        $this->_data =& $_SESSION;

        return NULL;
    }

这是我在找什么?

1 个答案:

答案 0 :(得分:0)

Official manual说:

  

当调用session_start()或会话自动启动时,PHP会   调用open和read session保存处理程序。这些将是一个   默认情况下或由PHP扩展提供的内置保存处理程序(例如   as SQLite或Memcached);或者可以是定义的自定义处理程序   的session_set_save_handler()。   读回调将检索任何现有的会话数据(存储在   特殊的序列化格式)并将被反序列化并用于   读取时自动填充$ _SESSION超全局   callback将保存的会话数据返回给PHP会话处理。

所以答案应该是这样的:除非您通过session_set_save_handler()定义了自定义保存处理程序,否则这是本机PHP行为。