2008/07/31(木)アクセス(HTTPリクエスト)ごとにIPアドレスの変わるISPが存在しようがしまいがIPアドレスを信用しちゃダメ

アクセスごとにIPアドレスの変化するISPは存在するのか - 狐の王国

正しくは「HTTP request毎に変化する」だね。

他社さんのことなので社名は上げないけど、個人向けのISPで実際にそういう風になっているところはありました。
(試してみて「あーっ」ってことに。本番投入前でよかった)

複数台のproxyが設置されていて、ユーザ側からのリクエストをL4的にラウンドロビンで分散させているらしい。セッションの継続とか(当然)考えていないので、アクセスごとに違うIPアドレスからくるように見えるわけです。


で、そもそもHTTPの規格に「連続した同一の人物(同一のセッション)のHTTPリクエストは常に同じIPアドレスからくる」なんて決まりはないので、「同じIPアドレスであることを期待する」ようなWebアプリ書いちゃいけません。

規格が全てではないけど、だからと言って規格にないことを「こうなってるはず!」で強行するのは失敗の元ですよ。

2008/07/13(日)PDO buffered query

個人的な作り物。
コアの部分はperlで書いて1日で出来たのだけど、設定用のWebUIが全然作れない。ちなみにWebUIはPHPで書いてる。

で、PDOで絶賛はまり中。
Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
とか言われるんですが...
こちらでも同じようなことではまってらっしゃる方おられる模様。

別に仕様としてそれでいいんですが、PDOStatmentクラスって明示的に結果を破棄するメソッドってないのね?
perlのDBIだと$sth->finish()で明示的に破棄できるんですが。

pdo-mysqlの説明にはattributeを指定するのは移植性が低いからfetchAllを使えと書いてあるのですが、それもなんだかなぁ。


ところでPDOってprepareに失敗してもexception投げないんですね。
例外でハンドリングできるだろうと高を括ってたら全然違うところでエラーになるんでやんの。


追記:
PHPからMySQLのクエリ送信のバッファリングについて - gounx2の日記
まとまってたので。