インジケータの表示/非表示 – iPhoneアプリケーション開発
概要
iPhone(iPad)の利用時に、アプリケーションが通信処理を行う場合、画面上部のステータスバー(日時などが表示される領域)に、インジケーター(Indicator)を表示剃る方法。
iOSが勝手に表示してくれれば良いのだけれど、そういう仕組にはなっていないので、コードで制御する必要があります。
方法
超簡単
インジケータを表示する
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
インジケータを隠す
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
通信時にはインジケータを表示するようにしないと、審査通らないような気がするので注意。
Google Maps API(V3) Geocoding API Web サービスで、座標を取得する
前置き
ここ数年間、住所から座標(緯度・経度)を取得するために、Geocodingで提供されているAPIを利用していました。ジオコーディングデータを取得する為のサービスが、ある時期までGoogleから提供されていなかったため、Geocodingは、大変有益で有名なサービスとなりました。
が!!!
GoogleがGoogle Maps API Webサービスの一部として、Geocoding APIを提供開始したため、こちらを利用することにします。
注意事項(引用元)
・Google Geocoding API の使用は、1 日あたり 2,500 件まで
・Geocoding API は Google マップと組み合わせて使用する場合にのみ使用できます。地図に表示せずにジオコーディングの結果のみを利用することは禁止されています。
概要
Web API呼び出しURL
http://maps.google.com/maps/api/geocode/output?parameters
パラメータ
output : 出力形式の指定
・json
・xml
parameters
・address or latlng
・bounds
・region
・language
・sensor
コード
住所から緯度・経度取得
PHP5+XMLで。
<?php
$address = rawurlencode("東京都港区台場1-1-1");
$url = "http://maps.google.com/maps/api/geocode/xml?address={$address}&sensor=false";
$xml = simplexml_load_file($url);
if($xml->error){
return;
}
if((string)$xml->status != "OK"){
return;
}
$lat = ((string)$xml->result->geometry->location->lat);
$lng = ((string)$xml->result->geometry->location->lng);
print $lat . " - " . $lng;
?>
結果
35.6351932 – 139.7763928
というわけで
・簡単
・ジオコーディング・逆ジオコーディング可能
・レスポンス高速
な、Geocoding APIを使いましょう。
セッションIDのふりなおし(Java, J2EE, resin)
目的
ユーザーのログイン前後で同じセッションIDが使われているのを、ログインのタイミングで新しいセッションIDを使うようにする。セッション・ハイジャック対策。
セッション・ハイジャックについて
セッションを用いたログイン管理を行なっているアプリケーションにおいて、攻撃者が用意したセッションIDをリクエストに含まされた正規の利用者が、正規の手順でログインすることで、不正なセッションIDを用いたログイン認証が行われてしまう。
環境
言語:java(J2EE)
サーバー:resin(http://www.caucho.com/)
結論
${RESIN_HOME}/conf/resin.confのsession-configに、
<reuse-session-id>false</reuse-session-id>
を追加。
流れ
某ECサイトで、ログイン前後で(というか、cookieの期限がすぎるまで)、同一のセッションIDがずっと使いまわされていることが判明。
↓
ソースチェック。ログイン処理の際に、セッション無効化処理がコーディングされていることを確認。ということは、アプリケーションじゃなくて環境の問題?
request.getSession().invalidate();
↓
ローカルでデバッグしてみたら、セッションIDがふりかわっていることを確認。
↓
少し考えた末に、ローカルはTomcat, サーバではResinを使用していることを思い出す。
↓
ドキュメントチェック
↓
発見(http://www.caucho.com/resin-3.0/config/webapp.xtp#session-config)
↓
設定追加
<reuse-session-id>false</reuse-session-id>
↓
完成!
というわけで、
・サーバ上だとデバッグしにくい。


