【问题标题】:(Spotify) how to stop cross browser session sharing?(Spotify) 如何停止跨浏览器会话共享?
【发布时间】:2021-01-02 06:48:31
【问题描述】:

我正在使用 spotify api,出于某种原因,他们的会话类块将自己的数据存储在 $_SESSION 中。作为一种解决方法,我编写了一个类“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();
        }

【问题讨论】:

    标签: php session cross-browser spotify fat-free-framework


    【解决方案1】:

    如果我做对了……你所有的用户都会得到相同的 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();
        }
    }
    

    【讨论】:

    • 感谢您的快速回复,我已经编辑了我的问题,添加了 sessionRead 和 sessionDestroy;我不能省略你的建议
    【解决方案2】:

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

        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];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 2012-12-18
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 2012-03-22
      相关资源
      最近更新 更多