はい!負荷性能検証で使っているサーバを紹介するよ!の巻!

はい!3.6beta13、beta11(Propel改造板)、3.4.15、3.2.7.5の負荷性能を比較してみた!の巻!で使ってるサーバを紹介するよ。

■Webサーバ(芭蕉1と命名)
インテル Boxed Intel Core 2 Quad Q8400S 2.66GHz 4MB 45nm 65W BX80580Q8400S
http://www.amazon.co.jp/gp/product/B0027K74DC/

インテル Boxed Intel Desk Top Board G41MJ BOXDG41MJ
http://www.amazon.co.jp/gp/product/B001W9JMOS

WesternDigital WD3200BEKT ScorpioBlack 2.5inch 7200rpm 320GB 16MB SATA/3.0Gbs
http://www.amazon.co.jp/gp/product/B001E92Y8M

Flex-ATX電源 TOP-220W-FLEX
http://www.amazon.co.jp/gp/product/B0041G2778

ノーブランド DIMM DDR2 SDRAM PC6400 4GB
http://kakaku.com/item/05200013154/

CPU: \17,000
MEM: \7,800
M/B: \7,200
HDD: \6,400
PWR: \7,000
メモリ保証: \1,000
合計: \54,200

UNIX Benchmarks (Version 5.1.2)のスコア
System Benchmarks Index Score, 3874.0

■DBサーバ(芭蕉3と命名)
インテル Boxed Intel Core i5 i5-760 2.80GHz 8M LGA1156 Lynnfield BX80605I5760
http://www.amazon.co.jp/dp/B003VANRAQ/

BIOSTAR LGA1156 MicroATXマザーボード TH55B HD
http://www.amazon.co.jp/dp/B003DH9IQ4/

シー・エフ・デー販売 Elixir デスクトップ用メモリ DDR3 W3U1333Q-4G DDR3 PC3-10600 CL9 4GB x 2枚セット
http://www.amazon.co.jp/dp/B00405SB7U/

日立 HGST Deskstar パッケージ版 3.5inch 500GB 16MB 7200rpm 0S02600
http://www.amazon.co.jp/dp/B003Y8YVPK/

アビー ZUMAX 360W ATX電源 ZU-360B0
http://www.amazon.co.jp/dp/B001P4QCIO/

CPU: \19,079
MEM: \10,259
M/B: \8,142
HDD: \3,680
PWR: \2,980
合計: \44,131

UNIX Benchmarks (Version 5.1.2)のスコア
System Benchmarks Index Score, 2601.4


■ApacheBench用サーバ(芭蕉2と命名)
AMD AMD AthlonII X2 240e AD240EHDGQBOX
http://www.amazon.co.jp/dp/B002PA7U88/

MSI M-ATX AMDシリーズ マザーボード 785GM-P45
http://www.amazon.co.jp/dp/B00389P3VG/

シー・エフ・デー販売 Elixir デスクトップ用メモリ DDR3 W3U1333Q-4G DDR3 PC3-10600 CL9 4GB x 2枚セット
http://www.amazon.co.jp/dp/B00405SB7U/

日立 HGST Deskstar パッケージ版 3.5inch 500GB 16MB 7200rpm 0S02600
http://www.amazon.co.jp/dp/B003Y8YVPK

サイズ ATX250W電源 Ichi Power 250 IP250A
http://www.amazon.co.jp/dp/B003H34AMQ/

CPU: \5,429
MEM: \10,259
M/B: \5,717
HDD: \3,680
PWR: \2,059
合計: \27,144

UNIX Benchmarks (Version 5.1.2)のスコア
System Benchmarks Index Score, 1566.5

はい!OpenPNE3.6beta13、beta11(Propel改造版)、3.4.15、3.2.7.5の負荷性能を比較してみた!の巻!


はい!ギュンばんわ!

OpenPNE3の負荷性能の可視化のツールで、

  • OpenPNE3.6beta13(Doctrine版・コアだけ)
  • OpenPNE3.6beta11(Propel改造版・コアだけ)
  • OpenPNE3.4.15(Doctrine版・コアだけ)
  • OpenPNE3.2.7.5(Doctrine版・コアだけ)

に約38万ユーザ(特に38という数字に意味はなくテストしている初期段階で使った数字をそのまま使ってしまった。10万とか50万とか100万とかに今後修正したい)のデータを投入し、ApacheBenchで同時接続10で1時間負荷をかけてみた。

結果は、

  • OpenPNE3.6beta13(Doctrine版・コアだけ)
    • PVは、約150PV/分。。。
    • httpdの平均メモリ使用量は、約37MB。。。
    • 平均レスポンスタイムは、3〜4秒。。。
  • OpenPNE3.6beta11(Propel改造版・コアだけ)
    • PVは、約190PV/分。。。
    • httpdの平均メモリ使用量は、約41MB。。。
    • 平均レスポンスタイムは、3〜4秒。。。
  • OpenPNE3.4.15(Doctrine版・コアだけ)
    • PVは、約90PV/分。。。
    • httpdの平均メモリ使用量は、約25MB。。。
    • 平均レスポンスタイムは、5〜6秒。。。
  • OpenPNE3.2.7.5(Doctrine版・コアだけ)
    • PVは、約90PV/分。。。
    • httpdの平均メモリ使用量は、約33MB。。。
    • 平均レスポンスタイムは、5〜6秒。。。

な感じ。。。

ピアレビューできるように負荷性能検証環境と負荷性能検証方法の手順を追って示すよ!

#2011/8/23 16:45追記
ハードウェアの素性、各OpenPNEのセットアップ方法を追記した!
検証の生データとかは↓ね。
https://github.com/rysk92/doc/tree/master/20110823_webapp_monitor_openpne

#2011/8/23 16:51追記
次は、

  • OpenPNE2.14での検証
  • 段階的に負荷を増やしての限界テスト

かな〜

はい!OpenPNE3の負荷性能を可視化していってみる!の巻!


はい!ギュンばんわ!
OpenpNE3の負荷性能を可視化していってみようかなと。

ということで、
httpdプロセスの挙動とか、sarの値とか、PVとかを可視化するツールを作ってみました。
https://github.com/rysk92/webapp_monitor
これです。

使い方はREADMEの通りで、添付の画像みたいな感じでグラフを吐き出せますと。

このツールを改良しつつ、チューニングのビフォー・アフターをみていこうかなと。

ちなみにグラフはPythonのmatplotlibってので描いてみましたよと。

はい!なんとなくOpenPNE3.6 beta12のソースを俯瞰してみる!の巻!


はい!ギュンばんわ!

プロジェクトの見積りとかのために作ったツールを共有してみたりする。

ソースは、
https://github.com/rysk92/chartsrc
で、
git clone git://github.com/openpne/OpenPNE3.git
cd OpenPNE3
git checkout OpenPNE-3.6beta12
とかやって、
python chartsrc.py ../OpenPNE3
とかやるとtsvで、
ファイルの場合、

  • ファイルサイズ
  • 拡張子
  • 行数
  • 文字数
  • 単語数

が出る。

ディレクトリの場合、

が出る。

吐き出した結果は、
https://github.com/rysk92/doc/tree/master/20110818_chartsrc
に置いたwww

はい!OpenPNE3のクッキーとセッションについてガラケー(mobile_frontend)もついでに整理してみる!の巻!

はい!ギュンばんわ!
ガラケー(mobile_frontend)もついでに整理してみる!

■1■はじめてSNSのトップページを開いた時( http://op36-beta-head.myzw2.pne.jp/ )

  • 生成されたクッキー
名前(name)	OpenPNE_mobile_frontend
値(value)	6b3nbjqjnk5ghrvqg4i4q5f9o5
ホスト(host)	op36-beta-head.myzw2.pne.jp
パス(path)	/
セキュア(secure)	無効
有効期間(expire)	セッションの終わり
  • 生成されたクッキーに紐づいたセッション
cat sess_6b3nbjqjnk5ghrvqg4i4q5f9o5 
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";symfony/user/sfUser/lastRequest|i:1311232107;symfony/user/sfUser/authenticated|b:0;symfony/user/sfUser/credentials|a:0:{}symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}symfony/user/sfUser/culture|s:5:"ja_JP";

(読みやすいように展開)
cat sess_6b3nbjqjnk5ghrvqg4i4q5f9o5 
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";
symfony/user/sfUser/lastRequest|i:1311232107;
symfony/user/sfUser/authenticated|b:0;
symfony/user/sfUser/credentials|a:0:{}
symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}
symfony/user/sfUser/culture|s:5:"ja_JP";

■2■ガラケーメールアドレスとパスワードでログインしたあと( http://op36-beta-head.myzw2.pne.jp/ )

  • 生成されたクッキー
名前(name)	OpenPNE_mobile_frontend
値(value)	jn0cehd934js22je986p871co2
ホスト(host)	op36-beta-head.myzw2.pne.jp
パス(path)	/
セキュア(secure)	無効
有効期間(expire)	セッションの終わり
  • 生成されたクッキーに紐づいたセッション
cat sess_jn0cehd934js22je986p871co2
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";symfony/user/sfUser/lastRequest|i:1311232281;symfony/user/sfUser/authenticated|b:1;symfony/user/sfUser/credentials|a:1:{i:0;s:9:"SNSMember";}symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:2:{s:9:"auth_mode";s:11:"MailAddress";s:9:"member_id";s:1:"1";}}symfony/user/sfUser/culture|s:5:"ja_JP";

(読みやすいように展開)
cat sess_jn0cehd934js22je986p871co2
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";
symfony/user/sfUser/lastRequest|i:1311232281;
symfony/user/sfUser/authenticated|b:1;
symfony/user/sfUser/credentials|a:1:{i:0;s:9:"SNSMember";}
symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:2:{s:9:"auth_mode";s:11:"MailAddress";s:9:"member_id";s:1:"1";}}
symfony/user/sfUser/culture|s:5:"ja_JP";

■4■ガラケーで「かんたんログイン」でログインしたあと( http://op36-beta-head.myzw2.pne.jp/ )

  • 生成されたクッキー(その1)
名前(name)	OpenPNE_mobile_frontend
値(value)	08d3ipqnt1kjogji4mbg5g87g6
ホスト(host)	op36-beta-head.myzw2.pne.jp
パス(path)	/
セキュア(secure)	無効
有効期間(expire)	セッションの終わり
  • 生成されたクッキー(その1)に紐づいたセッション
cat sess_08d3ipqnt1kjogji4mbg5g87g6
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";symfony/user/sfUser/lastRequest|i:1311673254;symfony/user/sfUser/authenticated|b:1;symfony/user/sfUser/credentials|a:1:{i:0;s:9:"SNSMember";}symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:2:{s:9:"auth_mode";s:9:"MobileUID";s:9:"member_id";s:1:"1";}}symfony/user/sfUser/culture|s:5:"ja_JP";

(読みやすいように展開)
cat sess_08d3ipqnt1kjogji4mbg5g87g6
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";
symfony/user/sfUser/lastRequest|i:1311673254;
symfony/user/sfUser/authenticated|b:1;
symfony/user/sfUser/credentials|a:1:{i:0;s:9:"SNSMember";}
symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:2:{s:9:"auth_mode";s:9:"MobileUID";s:9:"member_id";s:1:"1";}}
symfony/user/sfUser/culture|s:5:"ja_JP";
  • 生成されたクッキー(その2)
名前(name)	op_mobile_uid
値(value)	b16487624c9080d54a41c0c9afc2e15a579d9025aa3350c91f766321621f0965
ホスト(host)	op36-beta-head.myzw2.pne.jp
パス(path)	/
セキュア(secure)	無効
有効期間(expire)	Sat, 26 Jul 2031 09:21:18 GMT

はい!現状のスマホ対応版のクッキーとセッションについて整理して、あるべき設計を考えてみる!の巻!

はい!ギュンばんわ!
スマホ版を考えてみるわよ!

■1■はじめてSNSのトップページを開いた時( http://touch.pne.jp/ )

  • 生成されたクッキー
名前(name)	symfony
値(value)	80gqa8d0aag0bkml6h35e20bt2
ホスト(host)	touch.pne.jp
パス(path)	/
セキュア(secure)	無効
有効期間(expire)	セッションの終わり
  • 生成されたクッキーに紐づいたセッション
cat sess_80gqa8d0aag0bkml6h35e20bt2
OpenPNE/user/opSecurityUser/site_identifier|s:19:"http://touch.pne.jp";symfony/user/sfUser/lastRequest|i:1311228672;symfony/user/sfUser/authenticated|b:0;symfony/user/sfUser/credentials|a:0:{}symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}symfony/user/sfUser/culture|s:5:"ja_JP";

(読みやすいように展開)
cat sess_v76k4q1j6oriphkfv2v92crht6
OpenPNE/user/opSecurityUser/site_identifier|s:19:"http://touch.pne.jp";
symfony/user/sfUser/lastRequest|i:1311228672;
symfony/user/sfUser/authenticated|b:0;
symfony/user/sfUser/credentials|a:0:{}
symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}
symfony/user/sfUser/culture|s:5:"ja_JP";

■2■次回から自動的にログインを「しない」でログインしたあと( http://touch.pne.jp/ )
(ていうか現在は「次回から自動的にログイン機能」がまだないです)

  • 生成されたクッキー
名前(name)	symfony
値(value)	0lmeniod9v5ner58vbcu7lv587
ホスト(host)	touch.pne.jp
パス(path)	/
セキュア(secure)	無効
有効期間(expire)	セッションの終わり
  • 生成されたクッキーに紐づいたセッション
cat sess_80gqa8d0aag0bkml6h35e20bt2 
OpenPNE/user/opSecurityUser/site_identifier|s:19:"http://touch.pne.jp";symfony/user/sfUser/lastRequest|i:1311228672;symfony/user/sfUser/authenticated|b:0;symfony/user/sfUser/credentials|a:0:{}symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}symfony/user/sfUser/culture|s:5:"ja_JP";

(読みやすいように展開)
cat sess_80gqa8d0aag0bkml6h35e20bt2 
OpenPNE/user/opSecurityUser/site_identifier|s:19:"http://touch.pne.jp";
symfony/user/sfUser/lastRequest|i:1311228672;
symfony/user/sfUser/authenticated|b:0;
symfony/user/sfUser/credentials|a:0:{}
symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}
symfony/user/sfUser/culture|s:5:"ja_JP";

■3■ログアウトしたあと( http://touch.pne.jp/logout )

  • 生成されたクッキー
名前(name)	symfony
値(value)	5j8ug2dsrsh28vqjbciqbo4691
ホスト(host)	touch.pne.jp
パス(path)	/
セキュア(secure)	無効
有効期間(expire)	セッションの終わり
  • 生成されたクッキーに紐づいたセッション
cat sess_5j8ug2dsrsh28vqjbciqbo4691 
OpenPNE/user/opSecurityUser/site_identifier|s:19:"http://touch.pne.jp";symfony/user/sfUser/lastRequest|i:1311229083;symfony/user/sfUser/authenticated|b:0;symfony/user/sfUser/credentials|a:0:{}symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}symfony/user/sfUser/culture|s:5:"ja_JP";
(読みやすいように展開)
cat sess_5j8ug2dsrsh28vqjbciqbo4691 
OpenPNE/user/opSecurityUser/site_identifier|s:19:"http://touch.pne.jp";
symfony/user/sfUser/lastRequest|i:1311229083;
symfony/user/sfUser/authenticated|b:0;
symfony/user/sfUser/credentials|a:0:{}
symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}
symfony/user/sfUser/culture|s:5:"ja_JP";

はい!OpenPNE3のクッキーとセッションについて整理してみる!の巻!

はい!ギュンばんわ!
みなさんOpenPNE3のセッションとクッキーの挙動を把握してますか?
ちょっとスマホのセッションとクッキーの設計を考えてるんで、整理してみるよ!
まずはpc_frontendから。

■1■はじめてSNSのトップページを開いた時( http://op36-beta-head.myzw2.pne.jp/ )

  • 生成されたクッキー
名前(name)	OpenPNE_pc_frontend
値(value)	v76k4q1j6oriphkfv2v92crht6
ホスト(host)	op36-beta-head.myzw2.pne.jp
パス(path)	/
セキュア(secure)	無効
有効期間(expire)	セッションの終わり
  • 生成されたクッキーに紐づいたセッション
cat sess_v76k4q1j6oriphkfv2v92crht6
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";symfony/user/sfUser/lastRequest|i:1311225851;symfony/user/sfUser/authenticated|b:0;symfony/user/sfUser/credentials|a:0:{}symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}symfony/user/sfUser/culture|s:5:"ja_JP";

(読みやすいように展開)
cat sess_v76k4q1j6oriphkfv2v92crht6
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";
symfony/user/sfUser/lastRequest|i:1311225851;
symfony/user/sfUser/authenticated|b:0;
symfony/user/sfUser/credentials|a:0:{}
symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}
symfony/user/sfUser/culture|s:5:"ja_JP";


■2■次回から自動的にログインを「しない」でログインしたあと( http://op36-beta-head.myzw2.pne.jp/ )

  • 生成されたクッキー
名前(name)	OpenPNE_pc_frontend
値(value)	270tr3aiiqflnso8p7ge1pp6d0
ホスト(host)	op36-beta-head.myzw2.pne.jp
パス(path)	/
セキュア(secure)	無効
有効期間(expire)	セッションの終わり
  • 生成されたクッキーに紐づいたセッション
cat sess_270tr3aiiqflnso8p7ge1pp6d0
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";symfony/user/sfUser/lastRequest|i:1311185502;symfony/user/sfUser/authenticated|b:1;symfony/user/sfUser/credentials|a:1:{i:0;s:9:"SNSMember";}symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:2:{s:9:"auth_mode";s:11:"MailAddress";s:9:"member_id";s:1:"1";}}symfony/user/sfUser/culture|s:5:"ja_JP";

(読みやすいように展開)
cat sess_270tr3aiiqflnso8p7ge1pp6d0
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";
symfony/user/sfUser/lastRequest|i:1311185502;
symfony/user/sfUser/authenticated|b:1;
symfony/user/sfUser/credentials|a:1:{i:0;s:9:"SNSMember";}
symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:2:{s:9:"auth_mode";s:11:"MailAddress";s:9:"member_id";s:1:"1";}}
symfony/user/sfUser/culture|s:5:"ja_JP";


■3■ログアウトしたあと( http://op36-beta-head.myzw2.pne.jp/member/login )

  • 生成されたクッキー
名前(name)	OpenPNE_pc_frontend
値(value)	j0gs7f5cv4b3u1v0rpj7v9sm07
ホスト(host)	op36-beta-head.myzw2.pne.jp
パス(path)	/
セキュア(secure)	無効
有効期間(expire)	セッションの終わり
  • 生成されたクッキーに紐づいたセッション
cat sess_j0gs7f5cv4b3u1v0rpj7v9sm07
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";symfony/user/sfUser/lastRequest|i:1311185648;symfony/user/sfUser/authenticated|b:0;symfony/user/sfUser/credentials|a:0:{}symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}symfony/user/sfUser/culture|s:5:"ja_JP";

(読みやすいように展開)
cat sess_j0gs7f5cv4b3u1v0rpj7v9sm07
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";
symfony/user/sfUser/lastRequest|i:1311185648;
symfony/user/sfUser/authenticated|b:0;
symfony/user/sfUser/credentials|a:0:{}
symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}
symfony/user/sfUser/culture|s:5:"ja_JP";

■4■次回から自動的にログインを「する」でログインしたあと( http://op36-beta-head.myzw2.pne.jp/ )

  • 生成されたクッキー(その1)
名前(name)	OpenPNE_pc_frontend
値(value)	8e1i4gsofsbevptaf9sdm6aqb0
ホスト(host)	op36-beta-head.myzw2.pne.jp
パス(path)	/
セキュア(secure)	無効
有効期間(expire)	セッションの終わり
  • 生成されたクッキー(その1)に紐づいたセッション
cat sess_8e1i4gsofsbevptaf9sdm6aqb0 
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";symfony/user/sfUser/lastRequest|i:1311185829;symfony/user/sfUser/authenticated|b:1;symfony/user/sfUser/credentials|a:1:{i:0;s:9:"SNSMember";}symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:2:{s:9:"auth_mode";s:11:"MailAddress";s:9:"member_id";s:1:"1";}}symfony/user/sfUser/culture|s:5:"ja_JP";

(読みやすいように展開)
cat sess_8e1i4gsofsbevptaf9sdm6aqb0
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";
symfony/user/sfUser/lastRequest|i:1311185829;
symfony/user/sfUser/authenticated|b:1;
symfony/user/sfUser/credentials|a:1:{i:0;s:9:"SNSMember";}
symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:2:{s:9:"auth_mode";s:11:"MailAddress";s:9:"member_id";s:1:"1";}}
symfony/user/sfUser/culture|s:5:"ja_JP";
  • 生成されたクッキー(その2)
名前(name)	e6d7f8f66ff1bebd8be7e7f321e6d14c
値(value)	YToyOntpOjA7czoxOiIxIjtpOjE7czo2NDoiZTRiMGMzMGQwNzYxOWM0ZjgxMDhlNzUwYjhjNmRmMzk3OGQxYTI4YzhlNzc4MWFkNTQ4NzBiMjY0OTU0NjQyNiI7fQ==
ホスト(host)	op36-beta-head.myzw2.pne.jp
パス(path)	/
セキュア(secure)	無効
有効期間(expire)	Fri, 19 Aug 2011 18:21:01 GMT
  • 生成されたクッキー(その2)のnameの値からセッションを取ってくる方法
↓の★あたりでドメインのmd5を算出して、そこから取ってる。
 /**
  * get remember login cookie
  *
  * @return array
  */
  protected function getRememberLoginCookie()
  {
★    $key = md5(sfContext::getInstance()->getRequest()->getHost());
    if ($value = sfContext::getInstance()->getRequest()->getCookie($key))
    {
      $value = unserialize(base64_decode($value));

      return $value;
    }
  }
  • 生成されたクッキー(その2)のnameの値からセッションの値をとって、そこからmember_idをとる方法
↓の★あたりでクッキーの値をbase64_decodeしてunserializeして値を取ってる。
 /**
  * get remember login cookie
  *
  * @return array
  */
  protected function getRememberLoginCookie()
  {
    $key = md5(sfContext::getInstance()->getRequest()->getHost());
    if ($value = sfContext::getInstance()->getRequest()->getCookie($key))
    {
★      $value = unserialize(base64_decode($value));

      return $value;
    }
  }

で、
$value[0] = (string) '1';
$value[1] = (string) 'f9af432578a4aef988d4eb6eb5a81abf08e6b2ac3d18412226633308b6d2df2e';
な感じになって、$value[0]がmember_id、$value[1]がremember_key。

でmember_configに問い合わせて、レコードがあったら、認証すると。

mysql> select * from member_config where name = 'remember_key'\G
*************************** 1. row ***************************
             id: 6
      member_id: 1
           name: remember_key
          value: f9af432578a4aef988d4eb6eb5a81abf08e6b2ac3d18412226633308b6d2df2e
 value_datetime: NULL
name_value_hash: a1eaf9b5b84db3ccbeb4567f4e4d4d0e
     created_at: 2011-07-21 03:17:08
     updated_at: 2011-07-21 03:58:20
1 row in set (0.00 sec)

■5■ログアウトしたあと

  • 生成されたクッキー
名前(name)	OpenPNE_pc_frontend
値(value)	glu8b59sg44qsl7lqiqtkivop3
ホスト(host)	op36-beta-head.myzw2.pne.jp
パス(path)	/
セキュア(secure)	無効
有効期間(expire)	セッションの終わり
  • 生成されたクッキーに紐づいたセッション
cat sess_glu8b59sg44qsl7lqiqtkivop3
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";symfony/user/sfUser/lastRequest|i:1311185975;symfony/user/sfUser/authenticated|b:0;symfony/user/sfUser/credentials|a:0:{}symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}symfony/user/sfUser/culture|s:5:"ja_JP";

(読みやすいように展開)
cat sess_glu8b59sg44qsl7lqiqtkivop3
OpenPNE/user/opSecurityUser/site_identifier|s:34:"http://op36-beta-head.myzw2.pne.jp";
symfony/user/sfUser/lastRequest|i:1311185975;
symfony/user/sfUser/authenticated|b:0;
symfony/user/sfUser/credentials|a:0:{}
symfony/user/sfUser/attributes|a:1:{s:14:"opSecurityUser";a:1:{s:9:"auth_mode";s:11:"MailAddress";}}
symfony/user/sfUser/culture|s:5:"ja_JP";

■6■ソースコードへのポインタ
OpenPNE_pc_frontendのクッキーとセッション辺りが生成される(為の処理がされる)のは、
cache/apache2handler/pc_frontend/prod/config/config_core_compile.yml.php
の↓あたり。

3715   public function initialize($options = null)
3716   {
3717     $cookieDefaults = session_get_cookie_params();
3718     $options = array_merge(array(
3719       'session_name'            => 'symfony',
3720       'session_id'              => null,
3721       'auto_start'              => true,
3722       'session_cookie_lifetime' => $cookieDefaults['lifetime'],
3723       'session_cookie_path'     => $cookieDefaults['path'],
3724       'session_cookie_domain'   => $cookieDefaults['domain'],
3725       'session_cookie_secure'   => $cookieDefaults['secure'],
3726       'session_cookie_httponly' => isset($cookieDefaults['httponly']) ? $cookieDefaults['httponly'] : false,
3727       'session_cache_limiter'   => 'none',
3728     ), $options);
3729         parent::initialize($options);
3730         $sessionName = $this->options['session_name'];
3731     session_name($sessionName);
3732     if (!(boolean) ini_get('session.use_cookies') && $sessionId = $this->options['session_id'])
3733     {
3734       session_id($sessionId);
3735     }
3736     $lifetime = $this->options['session_cookie_lifetime'];
3737     $path     = $this->options['session_cookie_path'];
3738     $domain   = $this->options['session_cookie_domain'];
3739     $secure   = $this->options['session_cookie_secure'];
3740     $httpOnly = $this->options['session_cookie_httponly'];
3741     session_set_cookie_params($lifetime, $path, $domain, $secure, $httpOnly);
3742     if (null !== $this->options['session_cache_limiter'])
3743     {
3744       session_cache_limiter($this->options['session_cache_limiter']);
3745     }
3746     if ($this->options['auto_start'] && !self::$sessionStarted)
3747     {
3748       session_start();
3749       self::$sessionStarted = true;
3750     }
3751   }