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

问题描述

我正在使用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();
        }

解决方法

如果我没错,..所有用户都获得相同的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();
    }
}
,

已解决,实际上非常简单。问题首先: 如果这样写:

let

中,customStore和customRead都只是意味着恢复会话。当然,无论使用哪个浏览器ip,您都将始终获得相同的数据。...这就是恢复会话的目的。

解决方案:

    $createPacket = array(
        "actionType" => "PAY",// Payment action type
        "currencyCode" => "USD",// Payment currency code
        "receiverList" => array(
            "receiver" => array(
                array(
                    "amount" => "25",// Payment amount
                    "email" => "nike@paypal.com",// Receiver's email address
                ),array(
                    "amount" => "150",// Payment amount
                    "email" => "xiaomi@paypal.com",),"returnUrl" => url("/"),// Redirect URL after approval
        "cancelUrl" => url("/"),// Redirect URL after cancellation
        "requestEnvelope" => array(
            "errorLanguage" => "en_US",// Language used to display errors
            "detailLevel" => "ReturnAll",// Error detail level
        ),);

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,'https://svcs.sandbox.paypal.com/AdaptivePayments/Pay');
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,CURLOPT_POSTFIELDS,json_encode($createPacket));
    curl_setopt($ch,CURLOPT_HTTPHEADER,[
        "X-PAYPAL-SECURITY-USERID:" . "YOUR_USER_ID","X-PAYPAL-SECURITY-PASSWORD:" . "YOUR_SECURITY_PASSWORD","X-PAYPAL-SECURITY-SIGNATURE:" . "YOUR_SIGNATURE","X-PAYPAL-APPLICATION-ID: APP-80W284485P519543T",//USE THIS Global SANDBOX APP ID 
        "X-PAYPAL-REQUEST-DATA-FORMAT: JSON","X-PAYPAL-RESPONSE-DATA-FORMAT: JSON",]);

    $response = json_decode(curl_exec($ch),true);
    return redirect("https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_ap-payment&paykey=".$response['payKey']));

所以,再次充满:

    session_id('session1');

    session_create_id($name);