モバイル開発におけるTokenの設計
目次
一:Token運用
二:Token実現プロセス
一:Token運用
1.appログインに成功し、tokenを生成します.
(1)tokenはファイルの形式で保存できます.
(2)apiインタフェースを呼び出すたびに比較されるため、サーバの圧力が増大するため、データベースに保存することは推奨されません.
(3)redisでtokenを保存し、推奨する.
2.ログインに成功した後、サービス側はtokenに戻り、アンドロイドまたはiosにこのtokenを保存させ、その後、操作のたびにtokenを持ってインタフェースを要求する.
3.次に、それが私たちに伝えたtokenを比較し、一致すれば正常にデータを返します.そうしないと、appにこのtokenが一致していないと伝え、再ログインする必要があります.
二:Token実現プロセス
1.tokenを生成するプロセス:各ユーザーには、1つのtokenファイルしかありません.生成前に以前のtokenを削除し、冗長ファイルを回避します.
2.appリクエストのインタフェースから送られてきたtoken処理:時間が切れたかどうかを判断し、期限が切れていない場合は、時間を延長することを考慮してください.そうしないと、毎日ログインする場合があります.具体的なコードは以下の通りです.
このコード署名には、グローバル変数があります.
tokenでユーザーのuseridを取得することを実現し、useridで操作することができます.
一:Token運用
二:Token実現プロセス
一:Token運用
1.appログインに成功し、tokenを生成します.
(1)tokenはファイルの形式で保存できます.
(2)apiインタフェースを呼び出すたびに比較されるため、サーバの圧力が増大するため、データベースに保存することは推奨されません.
(3)redisでtokenを保存し、推奨する.
2.ログインに成功した後、サービス側はtokenに戻り、アンドロイドまたはiosにこのtokenを保存させ、その後、操作のたびにtokenを持ってインタフェースを要求する.
3.次に、それが私たちに伝えたtokenを比較し、一致すれば正常にデータを返します.そうしないと、appにこのtokenが一致していないと伝え、再ログインする必要があります.
二:Token実現プロセス
1.tokenを生成するプロセス:各ユーザーには、1つのtokenファイルしかありません.生成前に以前のtokenを削除し、冗長ファイルを回避します.
/*
* token
* token
*/
private function get_token($userid){
$token=$userid.'_'.MD5($userid.uniqid().rand(00000000,99999999)); //
$file_dir=APP_PATH.'token/'.$userid.'/';
if(!@is_dir($file_dir)){
@mkdir($file_dir,0777,true);
}else{ // token
$dir_token=scandir($file_dir);
foreach($dir_token as $key => $value){
if($value == '.' || $value == '..'){}else{
unlink($file_dir.$value);
}
}
}
$fh = fopen($file_dir.$token,'w');
fwrite($fh,serialize(array('time'=>time(),'token'=>$token,'userid'=>$userid))); //
fclose($fh);
return $token;
}
2.appリクエストのインタフェースから送られてきたtoken処理:時間が切れたかどうかを判断し、期限が切れていない場合は、時間を延長することを考慮してください.そうしないと、毎日ログインする場合があります.具体的なコードは以下の通りです.
このコード署名には、グローバル変数があります.
public $userid=0;
$token=trim($this->input->post('token'))
if($token){
//1 token ,
/*2. : 2.1 : token 2.2 : id
*3. :
* */
$maxtime=86400 * 7;//7 ( )
$fcode = array();
//$this->newtoken=$token;
$user_id=strstr($token,"_",true);
$file=APP_PATH.'token/'.$user_id.'/'.$token;
if(file_exists($file)){ //1
$fh = @fopen($file,'r');
$fcode = unserialize(@fread($fh,filesize($file)));
@fclose($fh);
if($fcode['time']+$maxtime < time()){ //
unlink($file);
$this->userid=0;
}else{ //
$this->userid=$fcode['userid'];
$expire_time=86400 * 2;// , , ,
if($fcode['time']+$expire_time < time()){
$fh1 = fopen($file,'w');
fwrite($fh1,serialize(array('time'=>time(),'token'=>$token,'userid'=>$fcode['userid'])));
fclose($fh1);
}
}
}else{
$this->userid=0;
}
if($this->userid==0){
exit( json_encode(array('code'=>'10000','msg'=>' !')) );
}
}
tokenでユーザーのuseridを取得することを実現し、useridで操作することができます.