someone
(198506)
October 15, 2010, 2:37am
1
Приветствую всех!
У меня проблема такая что не сохраняется авторизация пользователя на сайта и после 20 минут неактивности сбрасывается авторизация. Хотя куки сохраняется. Сайт работает с поддоменами виртуальными. В конфиге прописана привязка на .site.ru. Подскажите, пожалуйста в какую сторону рыть?
В модели юзеров прописан duration на 30 дней.
В конфиге:
'session' => array(
'class' => 'CDbHttpSession',
'connectionID' => 'db',
'sessionName' => 'sessid',
'timeout' => 3200,
'autoCreateSessionTable' => false,
'cookieParams' => array(
'domain' => '.site.ru',
'lifetime'=>24*3600*30,
),
),
'user'=>array(
'class'=>'WebUser',
'allowAutoLogin' => true,
'autoRenewCookie' => true,
'identityCookie' => array(
'domain' => '.site.ru',
'expire' => 24*3600*30,
),
'loginUrl' => array('/user/login'),
),
'authManager'=>array(
'class'=>'PhpAuthManager',
//'connectionID'=>'db',
'defaultRoles'=>array('guest'),
'showErrors' => YII_DEBUG,
),
в WebUser:
<?php
class WebUser extends CWebUser {
private $_model = null;
protected $_keyPrefix;
public function init()
{
parent::init();
$this->stateKeyPrefix = md5(Yii::app()->name);
}
...
в модели Users
public function login($username, $userpass)
{
if($this->_identity===null)
{
$this->_identity=new UserIdentity($username, $userpass);
$this->_identity->authenticate();
}
if($this->_identity->errorCode===UserIdentity::ERROR_STATUS_NOTACTIV)
{
// @todo
}
if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
{
$duration = 24*3600*30; // 30 days
if (Yii::app()->user->login($this->_identity,$duration)) {
$this->updateByPk(Yii::app()->user->getId(), array('lastLogin' => time()));
Yii::app()->user->name = Yii::app()->user->getData()->login;
}
}
else
return $this->_identity->errorCode;
return $this->_identity->errorCode;
}
самое главное когда тестируешь чисть куки
второе - смотри куки: для поддоменов не должны создаватсья отдельные куки.
попробуй прописать в пхп.ини
session.cookie_domain = site.ru
после этого у меня завелось все.
еще один момент, если все в итоге получится то скорее всего будет проблема с фаерфоксом, метод логаут не будет фунциклировать, решение нашлось в англоязычном форуме:
public function logout($destroySession = true)
{
if($this->allowAutoLogin && isset($this->identityCookie['domain'])) {
$cookies = Yii::app()->getRequest()->getCookies();
if(null !== ($cookie = $cookies[$this->getStateKeyPrefix()]))
{
$originalCookie = new CHttpCookie($cookie->name, $cookie->value);
$cookie->domain = $this->identityCookie['domain'];
$cookies->remove($this->getStateKeyPrefix());
$cookies->add($originalCookie->name, $originalCookie);
}
}
parent::logout($destroySession);
}
Exel
(Bit By Bit)
October 16, 2010, 10:39am
3
Посмотрите, что у вас написано в session.gc_maxlifetime в php.ini
someone
(198506)
October 17, 2010, 6:57am
4
В php.inisession.gc_maxlifetime = 1440,
меняю на большее, по результату отпишу, спасибо всем
someone
(198506)
October 17, 2010, 11:00am
5
Увы, не помогает. Также сбрасывается
Exel
(Bit By Bit)
October 17, 2010, 7:43pm
6
Посмотрите, лежит ли файл сессии, там где он должен быть, по прошествии 20 минут.
MichaelMV
(Michmv)
October 18, 2010, 8:57pm
7
Не понимаю зачем советуют смотреть php.ini если автор предлагается хранить сессии в базе с помощью класса CDbHttpSession.
Если куки у вас сохраняются то копать нужно в сторону CDbHttpSession и смотреть что происходит с базой.
someone
(198506)
October 20, 2010, 12:32am
8
Вопрос решен. Спасибо всем ответившим.
[color=#1C2837][size=2][color=#000000] [/color][color=#008800]‘session’[/color][color=#000000] [/color][color=#666600]=>[/color][color=#000000] array[/color][color=#666600]([/color][color=#000000]
[/color][color=#008800]'class'[/color][color=#000000] [/color][color=#666600]=>[/color][color=#000000] [/color][color=#008800]'CDbHttpSession'[/color][color=#666600],[/color][color=#000000]
[/color][color=#008800]'connectionID'[/color][color=#000000] [/color][color=#666600]=>[/color][color=#000000] [/color][color=#008800]'db'[/color][color=#666600],[/color][color=#000000]
[/color][color=#008800]'sessionName'[/color][color=#000000] [/color][color=#666600]=>[/color][color=#000000] [/color][color=#008800]'sessid'[/color][color=#666600],[/color][color=#000000]
[/color][color=#008800]'timeout'[/color][color=#000000] [/color][color=#666600]=>[/color][color=#000000] [/color][color="#006666"]24*3600*30[/color][color=#666600], // тут помогло[/color][/size][/color]
Exel
(Bit By Bit)
October 20, 2010, 6:08am
9
Это от невнимательности, извиняюсь.