खोज…


टिप्पणियों

कुकीज़ HTTP अनुरोध का हिस्सा हैं, इसलिए यह दोनों नियंत्रक में एक अच्छा विचार है जो जिम्मेदारी अनुरोध और प्रतिक्रिया के साथ काम कर रही है।

कुकी सेट करना

एक कुकी सेट करने के लिए इसे बनाने के लिए और ब्राउज़र पर भेजने के लिए शेड्यूल करने के लिए आपको नए \yii\web\Cookie वर्ग उदाहरण बनाने की आवश्यकता है और कुकीज़ संग्रह की प्रतिक्रिया के लिए इसे जोड़ें:

$cookie = new Cookie([
    'name' => 'cookie_monster',
    'value' => 'Me want cookie!',
    'expire' => time() + 86400 * 365,
]);
\Yii::$app->getResponse()->getCookies()->add($cookie);

ऊपर हम कुकी वर्ग निर्माता को पैरामीटर दे रहे हैं। ये मूल रूप से देशी PHP setcookie फ़ंक्शन के साथ उपयोग किए जाते हैं:

  • name - कुकी का नाम।
  • value - कुकी का मूल्य। सुनिश्चित करें कि यह एक स्ट्रिंग है। ब्राउज़र आमतौर पर कुकीज़ में बाइनरी डेटा के बारे में खुश नहीं होते हैं।
  • domain - वह डोमेन जिसके लिए आप कुकी सेट कर रहे हैं।
  • expire - यूनिक्स टाइमस्टैम्प समय को इंगित करता है जब कुकी को स्वचालित रूप से हटा दिया जाना चाहिए।
  • path - सर्वर पर पथ जिसमें कुकी उपलब्ध होगी।
  • secure - यदि true , तो HTTPS का उपयोग करने पर ही कुकी सेट की जाएगी।
  • httpOnly - यदि true , तो जावास्क्रिप्ट के माध्यम से कुकी उपलब्ध नहीं होगी।

एक कुकी पढ़ना

कुकी को पढ़ने के लिए निम्नलिखित कोड का उपयोग करें:

$value = \Yii::$app->getRequest()->getCookies()->getValue('my_cookie');

नोट: यह कोड कुकी कुकीज़ को पढ़ने की अनुमति देता है जिसे कुकी घटक का उपयोग करके सेट किया गया है (क्योंकि यह डिफ़ॉल्ट रूप से सभी कुकीज़ पर हस्ताक्षर करता है)। इसलिए यदि आप JS कोड का उपयोग करके कुकी जोड़ते / अपडेट करते हैं, तो आप इसे इस विधि (डिफ़ॉल्ट रूप से) का उपयोग करके नहीं पढ़ सकते हैं।

उपडोमेन के लिए कुकीज़

सुरक्षा कारणों के कारण, डिफ़ॉल्ट कुकीज़ केवल उसी डोमेन पर पहुँच योग्य होती हैं जहाँ से उन्हें सेट किया गया था। उदाहरण के लिए, यदि आपने domain example.com पर कुकी सेट की है, तो आप इसे डोमेन www.example.com पर प्राप्त नहीं कर सकते। इसलिए यदि आप उप-डोमेन (यानी admin.example.com, profile.example.com) का उपयोग करने की योजना बना रहे हैं, तो आपको domain स्पष्ट रूप से सेट करने की आवश्यकता है:

$cookie = new Cookie([
    'name' => 'cookie_monster',
    'value' => 'Me want cookie everywhere!',
    'expire' => time() + 86400 * 365,
    'domain' => '.example.com' // <<<=== HERE
]);
\Yii::$app->getResponse()->getCookies()->add($cookie);

अब कुकी को example.com सभी उप-डोमेन से पढ़ा जा सकता है।

क्रॉस-उपडोमेन प्रमाणीकरण और पहचान कुकीज़

ऑटोलॉगिन या "मुझे याद रखें" कुकी के मामले में, उप-डोमेन कुकीज़ के मामले में उतने ही प्रश्न हैं। लेकिन इस बार आपको उपयोगकर्ता घटक को कॉन्फ़िगर करने की आवश्यकता है, identityCookie कुकी को वांछित कुकी कॉन्फ़िगरेशन में सेट करना।

आप एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल खोलें और उपयोगकर्ता घटक कॉन्फ़िगरेशन में identityCookie पैरामीटर जोड़ें:

$config = [
    // ...
    'components' => [
        // ...
        'user' => [
            'class' => 'yii\web\User',
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
            'loginUrl' => '/user/login',
            'identityCookie' => [ // <---- here!
                'name' => '_identity',
                'httpOnly' => true,
                'domain' => '.example.com',
            ],
        ],
        'request' => [
            'cookieValidationKey' => 'your_validation_key'
        ],
        'session' => [
            'cookieParams' => [
                'domain' => '.example.com',
                'httpOnly' => true,
            ],
        ],

    ],
];

ध्यान दें कि सभी उप-डोमेन के लिए cookieValidationKey समान होना चाहिए।

ध्यान दें कि आपको session::cookieParams को कॉन्फ़िगर करना होगा session::cookieParams संपत्ति में आपके user::identityCookie रूप में समरूपता होने की user::identityCookie सभी उप डोमेन के लिए login और logout कार्य सुनिश्चित करने के लिए user::identityCookie करें। यह व्यवहार अगले भाग पर बेहतर ढंग से समझाया गया है।

सत्र कुकी पैरामीटर

यदि आपके पास एक उपडोमेन से दूसरे या जब, इसके विपरीत, सत्र को बनाए रखने की आवश्यकता है, तो सत्र कुकीज़ पैरामीटर दोनों महत्वपूर्ण हैं, इसके विपरीत, आप /admin URL के तहत बैकएंड ऐप होस्ट करते हैं और अलग से सत्र संभालना चाहते हैं।

$config = [
    // ...
    'components' => [
        // ...
        'session' => [
            'name' => 'admin_session',
            'cookieParams' => [
                'httpOnly' => true,
                'path' => '/admin',
            ],
        ],
    ],
];


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow