PHP session_start cookie不保存会话ID

时间:2017-11-17 22:50:22

标签: php session cookies ini sessionid

在我的服务器上,我通过调用静态类函数来启动新会话。 问题是会话ID没有保存在会话cookie中,而且似乎没有在客户端保存会话cookie(例如,chrome不显示网站的cookie)。 打印$_COOKIE会产生array(0) { }。与$_SESSION相同。

以下是启动新会话的静态类函数:

<?php
class Session
{
    private function __construct() { }

    public static function sec_session_start()
    {
        $session_name = 'sec_session_id';
        $secure = TRUE;                     // https only
        $httponly = true;                   // javascript can't access session id

        $cookieParams = session_get_cookie_params();
        session_set_cookie_params($cookieParams['lifetime'],
            '/',
            'www.example-domain.de',
            $secure,
            $httponly);

        session_name($session_name);
        session_start();               
        session_regenerate_id();       
    }
}
?>

在每个页面的顶部,我开始使用

进行会话
Session::sec_session_start();

例如,当我在我网站的登录页面并打印出var_dump($_COOKIE)时,它会显示array(0) { }而不是array(2) { ["PHPSESSID"]=> string(26) "..." ["sec_session_id"]=> string(26) "..." }

php ini看起来如下 php ini

2 个答案:

答案 0 :(得分:0)

确保您的网站支持https

  

session.cookie_secure指定是否只应发送cookie   通过安全连接。

http://php.net/manual/en/session.configuration.php#ini.session.cookie-secure

如果没有,只需将$secure设置为false

希望这会有所帮助。

答案 1 :(得分:-1)

在任何会话功能之前,您必须拥有session_start作为第一行。