আমি প্রশ্নের এই অংশটির পুনরাবৃত্তি করি যা এখানে উত্তরগুলি উপেক্ষা করছে:
এটি কোনও তৃতীয় পক্ষের লাইব এ টানা প্রয়োজন ছাড়া কোডের কয়েকটি লাইনে করা যায়?
কুকিজ পড়া
Cookieশিরোনাম সহ অনুরোধগুলি থেকে কুকিজগুলি পড়া হয় । তারা শুধুমাত্র একটি nameএবং অন্তর্ভুক্ত value। পথগুলি যেভাবে কাজ করে সে কারণে একই নামের একাধিক কুকি পাঠানো যেতে পারে। নোডজেএস-এ, সমস্ত কুকিজকে একটি স্ট্রিং হিসাবে Cookieশিরোনামে প্রেরণ করা হয় । আপনি তাদের সাথে বিভক্ত ;। একবার আপনার কুকি হয়ে গেলে সমান বামের সমস্ত কিছু (উপস্থিত থাকলে) nameএবং তার পরের সমস্ত কিছু value। কিছু ব্রাউজার সমান চিহ্ন সহ একটি কুকি গ্রহণ করবে এবং নামটি ফাঁকা বলে ধরে নেবে। হোয়াইট স্পেসগুলি কুকির অংশ হিসাবে গণনা করা হয় না। মানগুলিও ডাবল উদ্ধৃতিতে আবৃত হতে পারে ( ")। মানগুলিও ধারণ করতে পারে =। উদাহরণস্বরূপ, formula=5+3=8একটি বৈধ কুকি।
/**
* @param {string} [cookieString='']
* @return {[string,string][]} String Tuple
*/
function getEntriesFromCookie(cookieString = '') {
return cookieString.split(';').map((pair) => {
const indexOfEquals = pair.indexOf('=');
let name;
let value;
if (indexOfEquals === -1) {
name = '';
value = pair.trim();
} else {
name = pair.substr(0, indexOfEquals).trim();
value = pair.substr(indexOfEquals + 1).trim();
}
const firstQuote = value.indexOf('"');
const lastQuote = value.lastIndexOf('"');
if (firstQuote !== -1 && lastQuote !== -1) {
value = value.substring(firstQuote + 1, lastQuote);
}
return [name, value];
});
}
const cookieEntries = getEntriesFromCookie(request.headers.Cookie);
const object = Object.fromEntries(cookieEntries.slice().reverse());
যদি আপনি সদৃশ নামগুলির প্রত্যাশা না করেন তবে আপনি এমন কোনও জিনিসে রূপান্তর করতে পারেন যা জিনিসগুলিকে সহজ করে তোলে। তারপরে আপনি object.myCookieNameমানটি পেতে চাইলে অ্যাক্সেস করতে পারেন । যদি আপনি সদৃশ প্রত্যাশা করে থাকেন তবে আপনি এর মাধ্যমে পুনরাবৃত্তি করতে চান cookieEntries। ব্রাউজারগুলি কুকিজকে অবতরণ অগ্রাধিকারে খাওয়ায়, তাই বিপরীতগুলি নিশ্চিত করে যে সর্বোচ্চ অগ্রাধিকার কুকিটি অবজেক্টে উপস্থিত হবে। ( .slice()অ্যারের রূপান্তর এড়াতে হবে।)
সেটিংস কুকি
" Set-Cookieপ্রতিক্রিয়া " কুকিজ আপনার প্রতিক্রিয়া শিরোনাম ব্যবহার করে সম্পন্ন হয় । response.headers['Set-Cookie']বস্তু আসলে একটি অ্যারের, তাই আপনি এটি ঠেলাঠেলি করা হবে। এটি একটি স্ট্রিং গ্রহণ করে তবে এতে কেবল nameএবং এর চেয়ে বেশি মান রয়েছে value। সবচেয়ে শক্ত অংশটি স্ট্রিং লিখছে তবে এটি একটি লাইনে করা যেতে পারে।
/**
* @param {Object} options
* @param {string} [options.name='']
* @param {string} [options.value='']
* @param {Date} [options.expires]
* @param {number} [options.maxAge]
* @param {string} [options.domain]
* @param {string} [options.path]
* @param {boolean} [options.secure]
* @param {boolean} [options.httpOnly]
* @param {'Strict'|'Lax'|'None'} [options.sameSite]
* @return {string}
*/
function createSetCookie(options) {
return (`${options.name || ''}=${options.value || ''}`)
+ (options.expires != null ? `; Expires=${options.expires.toUTCString()}` : '')
+ (options.maxAge != null ? `; Max-Age=${options.maxAge}` : '')
+ (options.domain != null ? `; Domain=${options.domain}` : '')
+ (options.path != null ? `; Path=${options.path}` : '')
+ (options.secure ? '; Secure' : '')
+ (options.httpOnly ? '; HttpOnly' : '')
+ (options.sameSite != null ? `; SameSite=${options.sameSite}` : '');
}
const newCookie = createSetCookie({
name: 'cookieName',
value: 'cookieValue',
path:'/',
});
response.headers['Set-Cookie'].push(newCookie);
মনে রাখবেন আপনি একাধিক কুকি সেট করতে পারেন, কারণ আপনি Set-Cookieআপনার অনুরোধে বাস্তবে একাধিক শিরোনাম সেট করতে পারেন । এ কারণেই এটি একটি অ্যারে।
বাহ্যিক গ্রন্থাগারে নোট:
আপনি ব্যবহার করতে সিদ্ধান্ত নেন তাহলে express, cookie-parserঅথবা cookie, নোট তারা অক্ষমতা যে অ-মানক আছে। পার্স করা কুকিগুলি সর্বদা ইউআরআই ডিকোড (শতাংশ-ডিকোডড) থাকে। এর অর্থ হল আপনি যদি এমন কোনও নাম বা মান ব্যবহার করেন যা নিম্নলিখিত বর্ণগুলির একটি রয়েছে: !#$%&'()*+/:<=>?@[]^`{|}সেগুলি লাইব্রেরির সাহায্যে আলাদাভাবে পরিচালনা করা হবে। আপনি যদি কুকি সেট করে থাকেন তবে সেগুলি এনকোডযুক্ত %{HEX}। এবং আপনি যদি একটি কুকি পড়ছেন তবে আপনাকে সেগুলি ডিকোড করতে হবে।
উদাহরণস্বরূপ, যখন email=name@domain.comএকটি বৈধ কুকি, এই লাইব্রেরি এটি হিসাবে এনকোড হবে email=name%40domain.com। আপনি যদি %নিজের কুকিতে এটি ব্যবহার করে থাকেন তবে ডিকোডিং সমস্যাগুলি প্রদর্শন করতে পারে । এটা ম্যাঙ্গাল হয়ে যাবে। উদাহরণস্বরূপ, আপনার কুকিটি ছিল: secretagentlevel=50%007and50%006হয়ে যায় secretagentlevel=507and506। এটি একটি প্রান্তের কেস, তবে লাইব্রেরিগুলি স্যুইচ করা থাকলে লক্ষ্য করার মতো কিছু।
এছাড়াও, এই লাইব্রেরিতে, কুকিগুলি একটি ডিফল্ট দিয়ে সেট করা হয় path=/যার অর্থ তারা হোস্টকে প্রতিটি url অনুরোধে প্রেরণ করা হয়।
আপনি যদি এই মানগুলি নিজেই এনকোড বা ডিকোড করতে চান তবে আপনি যথাক্রমে encodeURIComponentবা ব্যবহার করতে পারেন decodeURIComponent।
তথ্যসূত্র:
অতিরিক্ত তথ্য:
=ফেসবুকের কোনও কুকির মতো একটি সমান ( ) চিহ্ন থাকেfbm_1234123412341234=base_domain=.domain.com।