0

我第一次访问我的网站,我看到了服务器设置的会话 cookie。我正在重新加载页面,我看到只有我的浏览器将会话标识符发送到服务器,而服务器不返回会话 cookie。我正在使用 Kohana 框架。我想知道如果请求已经拥有会话cookie并且它没有过期或者这是由框架处理的,这是否是原生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;
    }

是我要找的吗?

4

1 回答 1

0

官方手册说:

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

所以答案应该是这样的:这是原生 PHP 行为,除非你定义了自定义保存处理程序session_set_save_handler()

于 2014-02-11T19:56:58.350 回答