[英]Keep session with cURL in codeigniter php
我有一個外部 API,我想在其中獲取一些數據,並且我想在所有請求中保留會話 ID,直到我注銷為止。 在 codeigniter 中使用 cURL lib 我有以下流程(myacc 和 mypass 只是占位符):
public function getCURL() {
echo $this->curl->simple_get('http://37.99.110.537:6001/webapi/auth.cgi?api=SYNO.API.Auth&method=login&version=2&account=myacc&passwd=mypassD&format=sid&session=SurveillanceStation');
}
這將輸出:
{"data":{"sid":"lH6WJCWMm5rkA14B0MPN570354"},"success":true}
在發出下一個請求時,我必須保留提供的 sid(會話 ID):
http://37.99.110.537:6001/webapi/entry.cgi?api=SYNO.SurveillanceStation.Camera&method=GetSnapshot&version=1&cameraId=2×tamp=1480512959&preview=true&_sid="lH6WJCWMm5rkA14B0MPN570354"
見最后sid="lH6WJCWMm5rkA14B0MPN570354" 。
然后注銷並殺死該sid。
每次登錄后,我都會得到一個新的 sid,我必須使用它來獲取圖片(帶有該 URL),然后注銷。
我認為在我的情況下不需要從文件中保存和使用 cookie,我認為是這樣的:
public function getCURL() {
echo $this->curl->simple_get('http://37.99.210.237:6001/webapi/auth.cgi?api=SYNO.API.Auth&method=login&version=2&account=myacc&passwd=mypassD&format=sid&session=SurveillanceStation');
if ($this->form_validation->run()){
$data= array(
'sid'=> $this->input->post('sid'),
'is_logged_in' => true
);
$this->session->set_userdata($data);
if(false == $this->CI->session->userdata('is_logged_in')) {
echo $this->curl->simple_get('http://37.99.110.537:6001/webapi/entry.cgi?api=SYNO.SurveillanceStation.Camera&method=GetSnapshot&version=1&cameraId=2×tamp=1480512959&preview=true&_sid="sid"');
}
}
}
^^ 那個語法搞砸了,但是我如何以正確的方式實現它,或者如何將會話 ID 保留在請求鏈上的最佳方式?
如果您想為長時間會話、多個請求等保留sid
,您可以將此json
保存到某個json
文件並在注銷時清除文件內容。
將您的$sid
getter 包裝到其他一些函數中。
function getSid()
{
//try to read from json
if(is_file('path/to/sid.json'){
$sid = json_decode(file_get_contents('path/to/sid.json', true));
if(!isset($sid['logout'])){
return $sid['data']['sid'];
}
}
$sid = $this->curl->simple_get('http://37.99.110.537:6001/webapi/auth.cgi?api=SYNO.API.Auth&method=login&version=2&account=myacc&passwd=mypassD&format=sid&session=SurveillanceStation');
//check and save `$sid`
if(strlen($sid) > 20) {
file_put_contents('path/to/sid.json', $sid);
return json_decode($sid, true)['data']['sid'];
}
return false;
}
並在注銷時更新sid.json
內容。
function logout()
{
file_put_contents('path/to/file', json_encode(['logout' => 'true']));
}
並調用這些方法。
對於一次執行中的每個請求,它將使用相同的sid
,當您點擊 'logout()' 時,它將銷毀sid
以便在下次執行時生成並使用新的sid
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.