问题描述
我正在使用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);