yii2
कुकीज़
खोज…
टिप्पणियों
कुकीज़ 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', ], ], ], ];