আমি প্রশ্নের এই অংশটির পুনরাবৃত্তি করি যা এখানে উত্তরগুলি উপেক্ষা করছে:
এটি কোনও তৃতীয় পক্ষের লাইব এ টানা প্রয়োজন ছাড়া কোডের কয়েকটি লাইনে করা যায়?
কুকিজ পড়া
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
।