2017-02-03 23 views
1

私はいくつかのデータを取得したい外部APIを持っており、ログアウトするまですべての要求を通してセッションIDを保持したい。この意志出力codeigniterのcURLとのセッションを維持する

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'); 
} 

:私は、以下の流れを(myaccとMYPASSは単なるプレースホルダです)持っているのCodeIgniterのカールのlibを使用して

{"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&timestamp=1480512959&preview=true&_sid="lH6WJCWMm5rkA14B0MPN570354" 

は終わり SID = "lH6WJCWMm5rkA14B0MPN570354"で参照してください。

その後、ログアウトしてそのsidを削除します。

ログインするたびに、そのURLを使って画像を取得してからログアウトするために使用する必要がある新しいsidが表示されます。

私は私のようなものだと思い、私の場合は、ファイルからクッキーを保存し、使用が必要ではないと思われる:それ構文^^

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&timestamp=1480512959&preview=true&_sid="sid"'); 

} 

} 
} 

が台無しにされますが、私はそれを作ることができる方法適切な方法、またはリクエストチェーンにセッションIDを保持するための最良の方法は?

+0

「クッキーを保存して使用することは間違っていると思います。 CodeIgniterのセッションはクッキーなしでは動作しません。 – Narf

+0

あなたは 'sid'を' url'に追加するかクッキー経由で送る必要がありますか? – Mubin

+0

URLに追加するだけです。 – Bogdan

答えて

1

長時間のセッションや複数のリクエストなどのためにsidのままにしたい場合は、jsonをファイルjsonに保存し、ログアウト時にファイルの内容を消去することができます。

あなたの$sidゲッターを他の機能にラップします。

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

これらのメソッドを呼び出します。

1回のリクエストごとに、同じsidを使用し、 'logout()'を押すとsidが破棄され、次回の実行時に生成され使用されます。

関連する問題