2012-10-12 22 views
20

मैं नीचे हमारे Yii कॉन्फ़िग फ़ाइल की प्रासंगिक भागों शामिल किया है:Yii उपयोगकर्ताओं सत्र समय समाप्ति के बावजूद 15-30 मिनट के बाद बाहर लॉग किया जा रहा कम से कम 1 करने के लिए स्थापित किया जा रहा दिन

return array(
... 
    'components'=>array(
     'session' => array(
      'timeout' => 86400, 
     ), 
     'user'=>array(
      'allowAutoLogin' => true, 
      'autoRenewCookie' => true, 
      'authTimeout' => 31557600, 
     ), 
    ... 
    ), 
... 
); 

मैं भी php में किया गया है .ini और session.gc_maxlifetime = 86400 सेट करें लेकिन इसने अभी भी समस्या को ठीक नहीं किया है।

वर्तमान में, मैं पूरी तरह से नुकसान के कारण इसे नुकसान पहुंचा सकता हूं और लगभग 15-30 मिनट निष्क्रियता के बाद उपयोगकर्ता को लॉग आउट कर सकता हूं। आदर्श रूप से उपयोगकर्ताओं को कम से कम एक दिन निष्क्रियता के लिए लॉग इन रहना चाहिए (और ब्राउज़र विंडो बंद करने से परे, ब्राउजर वरीयताओं को अनुमति देना)।

मैंने Google, yii और स्टैक ओवरफ़्लो को ट्रेल किया है और मुझे कुछ भी नहीं मिला है जो मैं देख रहा हूं ... लेकिन स्पष्ट रूप से मैं कुछ दिख रहा हूं। अगर कोई मेरी मदद कर सकता है तो मैं बहुत आभारी रहूंगा।


ठेठ कोड है कि हम उन प्रवेश के लिए प्रयोग कर रहे हैं का एक नमूना अनुरोध किया गया था और नीचे शामिल है:

$identity = new UserIdentity('facebook', $id, $user->name, $user->email); 
$loggedIn = Yii::app()->user->login($identity); 
$this->subscriptionChecker->updateCurrentUserSubscribed(); 

यह किसी भी समय है कि Yii::app()->user->login() कहा जाता है की बहुत विशिष्ट है


क्रोम से, यहां साइट के लिए कुकीज़ और उनकी समाप्तियां हैं (सभी कुकीज़ साफ़ करने और बस लॉग इन करने के बाद):

PHPSESSID expires When the browsing session ends 

// I'm informed these are set by google analytics 
__utma created Friday, 12 October 2012 14:05:31 expires Sunday, 12 October 2014 14:05:31 

__utmb created Friday 12 October 2012 14:05:31 expires Friday 12 October 2012 14:35:31, 

__utmc created Friday, 12 October 2012 14:05:31 expires When the browsing session ends 

__utmz created Friday 12 October 2012 14:05:31 expires Saturday 13 April 2013 02:05:31 
// end google analytics 
+1

जांचें कि आपने सत्र समय निर्धारित करने के लिए Yii :: ऐप() -> उपयोगकर्ता-> लॉगिन विधि का उपयोग किया है या नहीं? – Arfeen

+0

जब हम उपयोगकर्ताओं में लॉग इन करते हैं तो हम सत्र समय –

+1

सेट नहीं करते हैं, मुझे लगता है कि आप अपने उपयोगकर्ताओं में लॉग इन कैसे कर रहे हैं, यह महत्वपूर्ण है, क्या आप कोड का उस बिट को दिखा सकते हैं? –

उत्तर

14

http://www.yiiframework.com/doc/api/1.1/CWebUser#login-detail

धन्यवाद Arfeen जो मुझे सही दिशा में इशारा से मदद करने के लिए, जब तक आप Yii::app()->user->login() के दूसरे पैरामीटर सेट यह पता चला है कि Yii एक लगातार कुकी का उपयोग नहीं होगा, के लिए दूसरा पैरामीटर डिफ़ॉल्ट के रूप में 0. यह डिफ़ॉल्ट 0-मान किसी भी चीज को ओवरराइड करता है जिसे आपने टाइमआउट के साथ सेट किया हो सकता है।

+0

yup यही कारण है कि मैंने इसे जांचने के लिए कहा। लेकिन क्या आपने जांच की है कि आप किस मूल्य से प्राप्त कर रहे हैं yii ऐप उपयोगकर्ता की सबसे अच्छी संपत्ति? और वैसे भी आपका स्वागत है :) – Arfeen

+0

हाँ, सबसे अच्छी संपत्ति ठीक से काम कर रही थी, हम इसका काफी उपयोग करते हैं। –

1

इस प्रयास करें: पहले एक जब आप लॉगिन आप सेट कर सकते हैं setState मिला इस:

yii::app()->user->setState('userSessionTimeout', time() + Yii::app()->params['sessionTimeoutSeconds']); 

जोड़ने उन पाठ companents.controller.php

public function beforeAction(){ 
      // Check only when the user is logged in 
      if (!Yii::app()->user->isGuest) { 
       if (yii::app()->user->getState('userSessionTimeout') < time()) { 
        // timeout 
        Yii::app()->user->logout(); 
        $this->redirect(array('/site/login')); // 
       } else { 
        yii::app()->user->setState('userSessionTimeout', time() + Yii::app()->params['sessionTimeoutSeconds']) ; 
        return true; 
       } 
      } else { 
       return true; 
      } 
     } 

कर रहे हैं और उन जोड़ने config main.php फ़ाइल में हैं:

,210

'परम' => सरणी ('sessionTimeoutSeconds' => 1800 // 30 मिनट),

+0

yii2 में कोड के ऊपर कैसे –

-2

Yii2 संस्करण के लिए

अपने में ही सेकंड में समाप्ति सेट /config/params.php :

// Set the user session timeout 
Yii::$app->session->set('userSessionTimeout', time() + Yii::$app->params['sessionTimeoutSeconds']); 
:

'sessionTimeoutSeconds' => '1800', 

आप नियंत्रकों में/SiteController.php actionLogin() विधि निम्नलिखित जोड़ें

साइट नियंत्रक में पहले एक्शन विधि भी जोड़ें।php

public function beforeAction($action) 
{ 

    if (!parent::beforeAction($action)) { 
     return false; 
    } 

    // Check only when the user is logged in 
    if (!Yii::$app->user->isGuest) { 
     if (Yii::$app->session['userSessionTimeout'] < time()) { 
      Yii::$app->user->logout(); 
     } else { 
      Yii::$app->session->set('userSessionTimeout', time() + Yii::$app->params['sessionTimeoutSeconds']); 
      return true; 
     } 
    } else { 
     return true; 
    } 
} 

अपने विचार/लेआउट/main.php में: बीच सिर डोम स्वत: रीफ्रेश हैडर लॉगइन करने के लिए दृश्य वापस एप्लिकेशन भेजा में जोड़ने के लिए।

<? if (!Yii::$app->user->isGuest) { ?> 
      <meta http-equiv="refresh" content="<?php echo Yii::$app->params['sessionTimeoutSeconds'];?>;"/> 
<? } ?> 
0

Yii2

सत्र कुकीज़ के लिए लॉगिन 7 दिनों के बाद समय सीमा समाप्त हो सेट करने के बाद यह समाधान के लिए:

'components' => [ 
    'session' => [ 
     'class' => 'yii\web\Session', 
     'cookieParams' => ['lifetime' => 7 * 24 *60 * 60] 
    ], 
0

मैं एक समान समस्या थी, भले ही मैं कर authTimeout 3600 * 24 (24 घंटे) उपयोगकर्ता अभी भी लगभग 30 मिनट में लॉगआउट कर रहा है। मुझे पता चला php.ini पर एक विकल्प नहीं है कि:

session.gc_maxlifetime

डिफ़ॉल्ट के लिए इस विकल्प 24 मिनट है, तो मैं के लिए बदल मैं क्या जरूरत

सत्र .gc_maxlifetime = 86400

24 घंटे। मेरे लिए समस्या हल हो गई।

उम्मीद है कि यह किसी की मदद कर सकता है!