操作
Backport(バックポート) #2453
完了自動ログイン時に自動ログイン用のCookieが削除される
開始日:
2011-10-03
期日:
進捗率:
100%
予定工数:
説明
概要¶
ログイン時に自動ログインにチェックを入れているにも関わらず,次回自動ログインは成功するが,その次の自動ログインに失敗する.
失敗する原因として自動ログイン用のCookieが削除されていることが確認されている.
この問題は #2139 によって修正されたはずであるが, #2315 の修正によって再度発生するようになった.
再現手順¶
- SNSに自動ログインを有効にしてログイン
- ブラウザ終了
- 同ブラウザでSNSにアクセス
- 同ブラウザ終了
- 同ブラウザでSNSにアクセス
- ログアウト状態となっている
問題までの処理の流れ¶
- メンバが「次回から自動的にログイン」にチェックをいれてログインする
- 自動ログイン用のCookieと今回限りのログイン用のCookieがサーバから送られてきてブラウザに保存される
- ブラウザを終了する
- 今回限りのログイン用Cooikeが削除されるが自動ログイン用Cookieは残ったままとなる
- ブラウザを立ち上げてSNSにアクセスする
- 最初は未ログイン状態となりopAnonymousMemberのインスタンスが生成される
- opAnonymousMember生成時にログアウト処理が行われて自動ログイン用Cookieを削除する処理が行われる
- ブラウザから送られて来た自動ログイン用Cookieを用いてopRememberLoginFilterがログインに成功する
- ログインを完了してSNSを表示したときには今回限りのログイン用Cookieが存在するが自動ログイン用Cookieが削除されている状態となる
- ブラウザを終了する
- 今回限りのログイン用Cookieが削除されてなにもない状態となる
- ブラウザを立ち上げてSNSをにアクセスする
- opAmonymouseMemberとしてログイン画面にリダイレクトされる
原因¶
#2315 で修正されたコミット( 7fc9dfcc ) で下記部分においてopAnonymousMemberのインスタンス生成時にログアウト処理が行われるように修正されたため.
lib/user/opSecurityUser.class.php 330行目
321 /** 322 * Initializes all credentials associated and status with this user. 323 */ 324 public function initializeUserStatus() 325 { 326 opActivateBehavior::disable(); 327 $member = $this->getMember(); 328 opActivateBehavior::enable(); 329 330 if ($member instanceof opAnonymousMember || $member->getIsLoginRejected()) 331 { 332 $this->logout(); 333 $isSNSMember = false; 334 } 335 else 336 { 337 $isSNSMember = (bool)$member->getIsActive(); 338 } 339 340 $this->setIsSNSMember($isSNSMember); 341 if ($isSNSMember) 342 { 343 $member->updateLastLoginTime(); 344 } 345 }
修正方針¶
参考¶
操作