2015年2月5日木曜日

fuelphpで保存されるsessionで、Twitterbot/1.0やfacebookexternalhit/1.1といったbot系を保存させないようにする方法的なお話

  • このエントリーをはてなブックマークに追加

fuelphpでsessionの保存先をDBに変更する的なお話でDBにセッションを保存するといいよ的なお話を書いたけれども、
Twitter CardsやFacebook OGPなどのクローラーがアクセスした際に、そのセッション情報も保存してしまうということがある。
特にTwitterは中々の数クロールされるので、いらないデータがDB内に多くたまってしまう。

ということで今回はそのいらないセッションデータを溜まらないようにするにはという方法をば。

/fuel/core/classes/session/db.php

// do we need to create a new session?
if (is_null($this->record))
{
  // create the new session record
  if(!preg_match("/Twitterbot|facebookexternalhit/",$_SERVER['HTTP_USER_AGENT'])){
    $result = \DB::insert($this->config['table'], array_keys($session))->values($session)->execute($this->config['database']);
  }
}
175行目辺りにinsertとしてセッション情報を挿入するところがあるのだが、
ユーザーエージェントがTwitterbotかfacebookexternalhit(facebookのクローラー)でなければという条件文を追加することで、
余計なセッションデータがDB内に溜まらないという形になる。
けどcoreをいじってしまうという点からあまりオススメは出来ない方法であったりする。

てな感じでまぁ多少強引ではあるけどbot系のセッションが溜まらないようにする事が出来る。
もちろん他にbot系が見つかったら条件文に追加していけばよいのではないかと。
他のセッション保存方法でも、write()部分にこういう手を加えてあげれば対応できるはず。

けどまぁcoreを弄るからどうしてもやりたいとか自己責任のもとでないとあまりオススメはできないけど。

Adsense