(Spotify) 如何停止跨浏览器会话共享?

(Spotify) how to stop cross browser session sharing?

我正在使用 spotify api,出于某种原因,他们的会话 class 块将自己的数据存储在 $_SESSION 中。作为解决方法,我写了 class 'SystemHelper':

命名空间应用;

    class SystemHelper
    {

        /**
         * if session_id is empty string, then session_id has not been initialized
         * then set session_id named 'session1'
         * start session needs 2 parameters, name and value
         * always close session after writing
         *
         * @param   string  $name   any given name
         * @param   [type]  $value  any given value
         *
         */
        public static function customSessionStore($name, $value)
        {
    
            if (session_id() == '') {
                session_id('session1');
            }
            session_start();
            $_SESSION[$name] = $value;
            session_write_close();
        }

现在可以将数据存储在 $_SESSION 中,但问题是只要我使用我的帐户登录(我自己的登录表单,而不是 spotfiy 帐户),其他人都会登录,无论是哪个浏览器、ip等...

不知道怎么解决。 session_id 不应该生成一个随机 ID 吗?有人可以帮忙吗?

遗漏

            if (session_id() == '') {
                session_id('session1');
            }

没有解决,因为我还需要读取和删除存储在会话中的数据。所以,另外我有这个解决方法:

    public static function customSessionRead($name)
        {

            if (session_id() == '') {
                session_id('session1');
            }
            session_start();
            session_write_close();

            return $_SESSION[$name];
        }

和...

    public static function customSessionDestroy()
        {
            session_start();
            session_destroy();
        }

如果我做对了..您的所有用户都得到相同的 session_id()。

所以他们在技术上共享一个会话。据我所知,如果您开始会话,session_id() 将自动生成。所以你不需要自己设置session_id()。

因此您的代码应如下所示:

class SystemHelper
{

    /**
     * if session_id is empty string, then session_id has not been initialized
     * then set session_id named 'session1'
     * start session needs 2 parameters, name and value
     * always close session after writing
     *
     * @param   string  $name   any given name
     * @param   [type]  $value  any given value
     *
     */
    public static function customSessionStore($name, $value)
    {
        session_start();
        $_SESSION[$name] = $value;
        session_write_close();
    }
}

解决了,其实很简单。先说问题: 如果这样写:

    session_id('session1');

在两者中,customStore 和 customRead 仅表示恢复会话。当然你总是会得到相同的数据,无论哪个浏览器,ip,...这就是恢复会话的意义。

解决了什么:

    session_create_id($name);

所以,又满了:

public static function customSessionStore($name, $value)
{
    // if (session_id() == '') {
    //     session_id('session1');
    // }
    session_create_id($name);
    session_start();
    $_SESSION[$name] = $value;
    session_write_close();
}

并且,

public static function customSessionRead($name)
{
    // if (session_id() == '') {
    //     session_id('session1');
    // }
    session_start();
    session_write_close();
    return $_SESSION[$name];
}