ஜாவாஸ்கிரிப்ட் தேதியைப் புரிந்துகொள்வது. குக்கீ உருவாக்கத்தில் இப்போது சிக்கல்
ஜாவாஸ்கிரிப்ட் உடன் பணிபுரியும் போது, குக்கீகள் போன்ற டைனமிக் தரவைக் கையாள நேர முத்திரைகளை நிர்வகிப்பது மிகவும் முக்கியமானது. தி தேதி.இப்போது() குக்கீ உருவாக்கம் போன்ற செயல்பாடுகளுக்கு ஒரு தனிப்பட்ட அடையாளங்காட்டியை வழங்கும், மில்லி விநாடிகளில் தற்போதைய நேர முத்திரையைப் பெற முறை பெரும்பாலும் பயன்படுத்தப்படுகிறது. இருப்பினும், இந்த முறையைப் பயன்படுத்தும் போது டெவலப்பர்கள் எதிர்பாராத நடத்தையை எதிர்கொள்ளும் நேரங்கள் உள்ளன.
இந்த வழக்கில், ஒரு டெவலப்பர் பயன்படுத்த முயற்சிக்கும்போது ஒரு பொதுவான சிக்கல் எழுகிறது தேதி.இப்போது() ஒரு செயல்பாட்டிற்குள் தவறாக, வரையறுக்கப்படாத முடிவுகளுக்கு வழிவகுக்கும். குறிப்பாக டைனமிக் பெயர்கள் கொண்ட குக்கீகளை உருவாக்கும் போது இது செயல்பாடு தோல்வியடையலாம். இத்தகைய சிக்கல்களைத் திறம்படத் தீர்ப்பதற்கு முக்கிய பிரச்சனையைப் புரிந்துகொள்வது அவசியம்.
தற்போதைய நேர முத்திரையை உள்ளடக்கிய டைனமிக் பெயருடன் குக்கீயை உருவாக்குவதே இங்கு முதன்மையான குறிக்கோள். அவ்வாறு செய்வதன் மூலம், ஒவ்வொரு குக்கீயும் தனித்தனியாக அடையாளம் காணப்பட்டு, சிறந்த தரவு கண்காணிப்பு மற்றும் அமர்வு நிர்வாகத்தை அனுமதிக்கிறது. ஆனாலும், முறையாக செயல்படுத்தாமல் உள்ளது தேதி.இப்போது(), இந்த அணுகுமுறை உடைந்து போகலாம்.
ஏன் என்று பின்வரும் பிரிவுகளில் ஆராய்வோம் தேதி.இப்போது() இந்த சூழ்நிலையில் முறை வரையறுக்கப்படாமல் திரும்பலாம். கூடுதலாக, உங்கள் குக்கீ உருவாக்கும் செயல்பாடு தடையின்றி செயல்படுவதை உறுதிசெய்ய எளிய தீர்வை வழங்குவோம்.
கட்டளை | பயன்பாட்டின் உதாரணம் |
---|---|
Date.now() | Date.now() ஆனது ஜனவரி 1, 1970 இல் இருந்து கடந்த மில்லி விநாடிகளின் எண்ணிக்கையை வழங்குகிறது. இது டைனமிக் குக்கீ பெயர்களுக்கான தனித்துவமான நேர முத்திரைகளை உருவாக்கப் பயன்படுகிறது, குக்கீ பெயர் நகல் சிக்கலைத் தீர்க்கிறது. |
document.cookie | document.cookie = cookieName + "=" + saveData உலாவியில் குக்கீயை உருவாக்க அல்லது புதுப்பிக்க பயன்படுகிறது. இது குக்கீயை டைனமிக் பெயர் மற்றும் மதிப்புடன் அமைக்கிறது, இது அமர்வு அடிப்படையிலான தரவை நிர்வகிப்பதில் அவசியம். |
res.cookie() | res.cookie() என்பது Express.js செயல்பாடாகும், இது சர்வர் பக்கத்தில் குக்கீகளை அமைக்கிறது. சேவையகத்திலிருந்து குக்கீகளை கட்டுப்படுத்த வேண்டிய பின்தள செயல்பாடுகளுக்கு இந்த கட்டளை குறிப்பிட்டது. |
app.use() | app.use() என்பது Express.js இல் மிடில்வேரை ஏற்றுவதற்குப் பயன்படுத்தப்படுகிறது. இந்த சூழலில், JSON மற்றும் URL-குறியீடு செய்யப்பட்ட தரவுகளுடன் உள்வரும் கோரிக்கைகள் பாகுபடுத்தப்படுவதை உறுதிசெய்கிறது, குக்கீகளை அமைக்கும் போது தரவு கையாளுதலை எளிதாக்குகிறது. |
maxAge | அதிகபட்ச வயது: 360000 குக்கீ நீடிக்கும் காலத்தை (மில்லி விநாடிகளில்) வரையறுக்கிறது. இந்த கட்டளை குக்கீகளின் ஆயுட்காலத்தை நிர்வகிப்பதற்கு முக்கியமானது, அவை ஒரு அமர்வுக்குப் பிறகு சரியான முறையில் காலாவதியாகின்றன என்பதை உறுதிப்படுத்துகிறது. |
request(app) | கோரிக்கை(ஆப்) என்பது யூனிட் சோதனை கட்டமைப்பில் சூப்பர் டெஸ்டில் பயன்படுத்தப்படுகிறது. இது சேவையகத்தின் குக்கீ உருவாக்கத்தை சோதிக்க HTTP கோரிக்கைகளை உருவகப்படுத்துகிறது, குக்கீ நேர முத்திரையுடன் சரியாக அமைக்கப்பட்டுள்ளதா என்பதைச் சரிபார்க்கிறது. |
assert.match() | assert.match() என்பது குக்கீயின் பெயர் ஒரு குறிப்பிட்ட வழக்கமான வெளிப்பாடு வடிவத்துடன் பொருந்துகிறதா என்பதை சரிபார்க்க யூனிட் சோதனையில் பயன்படுத்தப்படும் சாய் உறுதிப்படுத்தல் முறையாகும். குக்கீ பெயரில் நேர முத்திரை சரியாக பதிக்கப்பட்டிருப்பதை இது உறுதி செய்கிறது. |
describe() | விவரிக்க() என்பது மோச்சாவின் சோதனை கட்டமைப்பின் ஒரு பகுதியாகும், அலகு சோதனை நிகழ்வுகளை ஒன்றாக தொகுக்கிறது. இது சோதனைத் தொகுப்புகளை வரையறுக்கிறது, அவை குக்கீ உருவாக்கத்தை சரிபார்ப்பதில் உள்ள பிரச்சனைக்கு குறிப்பிட்டவை. |
res.send() | res.send() கிளையண்டிற்கு ஒரு பதிலை அனுப்புகிறது. இந்தச் சூழலில், குக்கீ வெற்றிகரமாக அமைக்கப்பட்டதை உறுதிசெய்ய இது பயன்படுகிறது, இது சர்வர் பக்க தர்க்கத்தில் கருத்துக்களை வழங்குகிறது. |
Date.now உடன் ஜாவாஸ்கிரிப்ட் குக்கீ உருவாக்கத்தை ஆராய்கிறது
மேலே உள்ள ஸ்கிரிப்ட் எடுத்துக்காட்டுகள் பயன்படுத்துவதில் உள்ள சிக்கலை தீர்க்கின்றன ஜாவாஸ்கிரிப்ட் தேதி.இப்போது() தனித்துவமான பெயர்களைக் கொண்ட குக்கீகளை மாறும் வகையில் உருவாக்கும் செயல்பாடு. முதல் எடுத்துக்காட்டில், தற்போதைய நேர முத்திரையை உள்ளடக்கிய பெயருடன் குக்கீயை உருவாக்குவதற்கு முன்-இறுதி ஸ்கிரிப்ட் வடிவமைக்கப்பட்டுள்ளது. இதைப் பயன்படுத்தி செய்யப்படுகிறது தேதி.இப்போது() முறை, இது ஜனவரி 1, 1970 முதல் மில்லி விநாடிகளின் எண்ணிக்கையை வழங்குகிறது, ஒவ்வொரு குக்கீக்கும் தனித்துவமான பெயர் இருப்பதை உறுதி செய்வதற்கான நம்பகமான வழியை வழங்குகிறது. குக்கீ பெயர் மோதல்களைத் தவிர்ப்பதற்கு இந்த முறை முக்கியமானது, இது ஒரு அமர்வின் போது பல குக்கீகளை உருவாக்கும்போது நிகழலாம்.
Date.now() ஐப் பயன்படுத்துவதைத் தவிர, ஸ்கிரிப்ட் பயன்படுத்துகிறது ஆவணம்.குக்கீ கிளையன்ட் பக்கத்தில் குக்கீயை சேமிக்க கட்டளை. உலாவி குக்கீகளை நிர்வகிப்பதற்கு இந்தக் கட்டளை முக்கியமானது, குக்கீகளின் பெயர், மதிப்பு மற்றும் காலாவதியை அமைக்க டெவலப்பர்களை அனுமதிக்கிறது. இந்த வழக்கில், குக்கீ 360 வினாடிகளுக்குப் பிறகு காலாவதியாகும் வகையில் அமைக்கப்பட்டுள்ளது, இது குறிப்பிடுவதன் மூலம் செய்யப்படுகிறது அதிகபட்ச வயது குக்கீ சரத்தில். அமர்வுத் தரவை நிர்வகிக்கவும், சர்வர் தொடர்பு இல்லாமல் சரியான குக்கீ கையாளுதலை உறுதிப்படுத்தவும் கிளையன்ட் பக்க JavaScript எவ்வாறு பயன்படுத்தப்படலாம் என்பதை இந்த எடுத்துக்காட்டு விளக்குகிறது.
பின்-இறுதியில், இதேபோன்ற அணுகுமுறை பயன்படுத்தப்படுகிறது Node.js சேவையகத்தில் குக்கீகளை நிர்வகிக்க Express.js. தி res.cookie() செயல்பாடு இங்கே முக்கியமானது, ஏனெனில் இது சேவையகத்தை கிளையண்டிற்கு செட்-குக்கீ தலைப்பை அனுப்ப அனுமதிக்கிறது, இது தானாகவே உலாவியில் குக்கீயை சேமிக்கிறது. இந்த அணுகுமுறை சேவையக பக்க அமர்வு நிர்வாகத்திற்கு மிகவும் பயனுள்ளதாக இருக்கும், அங்கு குக்கீகள் மாறும் வகையில் உருவாக்கப்பட்டு உள்வரும் கோரிக்கைகளின் அடிப்படையில் நிர்வகிக்கப்படுகின்றன. குக்கீ பெயரில் நேர முத்திரையைச் சேர்க்க Date.now() ஐப் பயன்படுத்துவதன் மூலம், ஒவ்வொரு அமர்வும் தனித்தனியாக அடையாளம் காணப்படுவதை சேவையகம் உறுதி செய்கிறது.
இந்த செயலாக்கங்களை சரிபார்க்க, யூனிட் சோதனைகள் பயன்படுத்தி உருவாக்கப்படுகின்றன மோக்கா மற்றும் சாய் முன் இறுதியில், மற்றும் சூப்பர் டெஸ்ட் பின் முனைக்கு. குக்கீகள் சரியாக உருவாக்கப்பட்டு சேமிக்கப்படுகிறதா என்பதை இந்த சோதனைகள் சரிபார்க்கின்றன. யூனிட் சோதனைகள் குக்கீ பெயர்களைப் பொருத்தவும், நேர முத்திரைகள் மூலம் அவற்றின் சரியான உருவாக்கத்தை சரிபார்க்கவும் வலியுறுத்தல்களைப் பயன்படுத்துகின்றன. இது தீர்வு வலுவானது மற்றும் உற்பத்தி சூழல்களில் நம்பிக்கையுடன் பயன்படுத்தப்படுவதை உறுதி செய்கிறது. யூனிட் சோதனைகளைச் சேர்ப்பதன் மூலம், டெவலப்பர்கள் சாத்தியமான சிக்கல்களை முன்கூட்டியே அறிந்துகொள்ள முடியும், குக்கீகள் வெவ்வேறு நிலைமைகளின் கீழ் எதிர்பார்த்தபடி செயல்படுவதை உறுதிசெய்யலாம்.
ஜாவாஸ்கிரிப்ட் தேதியை நிர்ணயித்தல். இப்போது குக்கீ உருவாக்கத்தில் வரையறுக்கப்படவில்லை
ஜாவாஸ்கிரிப்ட் (வெண்ணிலா ஜேஎஸ்) - ஃப்ரண்ட்-எண்ட் ஸ்கிரிப்ட்
// Frontend solution using JavaScript and Date.now to create cookies correctly
// Problem: timestamp.now is undefined because Date() doesn’t have a 'now' property
// Solution: Use Date.now() for correct timestamp and dynamic cookie creation
// Function to save the data in a cookie with a timestamp
function save(saveData) {
// Get the current timestamp in milliseconds
let timestamp = Date.now();
// Construct the cookie name dynamically
let cookieName = "test" + timestamp;
// Set the cookie (you can use your own cookie library or direct JavaScript)
document.cookie = cookieName + "=" + saveData + "; max-age=360; path=/";
}
// Example usage: save("session data") will create a cookie like 'test123456789=session data'
save("session data");
// Note: Ensure the max-age and path match your needs. 'max-age=360' sets the cookie to last 360 seconds.
பின்தள தீர்வு: Node.js ஐப் பயன்படுத்தி குக்கீகளை மாறும் வகையில் அமைக்கவும்
Node.js - Express.js உடன் பேக்-எண்ட் ஸ்கிரிப்ட்
// Backend solution for dynamic cookie creation using Node.js and Express.js
// Requires Node.js and the Express framework to handle HTTP requests and responses
// Import necessary modules
const express = require('express');
const app = express();
const port = 3000;
// Middleware to parse JSON and URL-encoded data
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Route to create a dynamic cookie with a timestamp
app.post('/set-cookie', (req, res) => {
const saveData = req.body.saveData || "defaultData";
const timestamp = Date.now();
const cookieName = "test" + timestamp;
// Set the cookie with HTTP response
res.cookie(cookieName, saveData, { maxAge: 360000, httpOnly: true });
res.send(`Cookie ${cookieName} set successfully`);
});
// Start the server
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
// You can test this by sending a POST request to '/set-cookie' with 'saveData' in the body
குக்கீ உருவாக்கத்தை சரிபார்க்க யூனிட் டெஸ்ட் (முன்-இறுதி)
ஜாவாஸ்கிரிப்ட் - மோச்சா மற்றும் சாயுடன் யூனிட் டெஸ்ட்
// Unit test to validate the functionality of save() using Mocha and Chai
const assert = require('chai').assert;
describe('save function', () => {
it('should create a cookie with a valid timestamp', () => {
// Mock document.cookie
global.document = { cookie: '' };
save('testData');
assert.match(document.cookie, /test\d+=testData/);
});
});
குக்கீ உருவாக்கத்தை சரிபார்க்க யூனிட் டெஸ்ட் (பின்-எண்ட்)
Node.js - சூப்பர் டெஸ்ட் மற்றும் மோச்சாவுடன் யூனிட் டெஸ்ட்
// Unit test to validate dynamic cookie creation in Express.js
const request = require('supertest');
const express = require('express');
const app = require('./app'); // Assuming the above app is saved in app.js
describe('POST /set-cookie', () => {
it('should set a cookie with a timestamp', (done) => {
request(app)
.post('/set-cookie')
.send({ saveData: 'testData' })
.expect('set-cookie', /test\d+=testData/)
.expect(200, done);
});
});
ஜாவாஸ்கிரிப்டில் குக்கீ நிர்வாகத்தை மேம்படுத்துதல்
ஜாவாஸ்கிரிப்டில் குக்கீ நிர்வாகத்தின் மற்றொரு முக்கிய அம்சம் குக்கீகள் இருப்பதை உறுதி செய்வதை உள்ளடக்கியது பாதுகாப்பான மற்றும் தனியுரிமை விதிமுறைகளுக்கு இணங்குகிறது. குக்கீகளை உருவாக்கும் போது, குறிப்பாக முக்கியமான தரவுகளைக் கொண்டவை, பாதுகாப்பு பண்புகளைப் பயன்படுத்துவது அவசியம் Http மட்டும் மற்றும் பாதுகாப்பானது. HttpOnly பண்புக்கூறு ஜாவாஸ்கிரிப்ட் வழியாக குக்கீயை அணுக முடியாது என்பதை உறுதிசெய்கிறது, இது ஆபத்தை குறைக்கிறது XSS (கிராஸ்-சைட் ஸ்கிரிப்டிங்) தாக்குதல்கள். இதேபோல், பாதுகாப்பான பண்புக்கூறு, குக்கீயானது HTTPS இணைப்புகளில் மட்டுமே அனுப்பப்படுவதை உறுதிசெய்கிறது, பாதுகாப்பற்ற நெட்வொர்க்குகள் வழியாக அனுப்பப்படுவதைப் பாதுகாக்கிறது.
பாதுகாப்பிற்கு அப்பால், குக்கீகளுக்கான சரியான காலாவதி நேரத்தை அமைப்பது அமர்வு நிலைத்தன்மையை நிர்வகிப்பதற்கு முக்கியமானது. போன்ற பண்புகளைப் பயன்படுத்துவதன் மூலம் அதிகபட்ச வயது அல்லது காலாவதியாகிறது, குக்கீ எவ்வளவு காலம் செல்லுபடியாகும் என்பதை டெவலப்பர்கள் கட்டுப்படுத்தலாம். குறுகிய கால அமர்வுகளுக்கு, அதிகபட்ச வயதைப் பயன்படுத்துவது பயனுள்ளதாக இருக்கும், ஏனெனில் இது குக்கீ உருவாக்கப்பட்டதிலிருந்து சில நொடிகளில் கால அளவைக் குறிப்பிடுகிறது. மறுபுறம், காலாவதியாகும் பண்புக்கூறு குக்கீயின் காலாவதிக்கான ஒரு குறிப்பிட்ட தேதி மற்றும் நேரத்தை வரையறுக்க அனுமதிக்கிறது, அமர்வு நீளத்தின் மீது கூடுதல் கட்டுப்பாட்டை வழங்குகிறது.
நவீன இணைய மேம்பாட்டில், வெவ்வேறு உலாவிகளில் குக்கீகளை நிர்வகிப்பது என்பது பல்வேறு குக்கீ கொள்கைகள் காரணமாக சவாலாக இருக்கலாம். புரிந்துகொண்டு செயல்படுத்துவது முக்கியம் ஒரே தளம் பண்புக்கூறு, இது குறுக்கு-தள கோரிக்கைகளுடன் குக்கீகள் அனுப்பப்படுகிறதா என்பதைக் கட்டுப்படுத்துகிறது. இது தடுக்க உதவுகிறது சி.எஸ்.ஆர்.எஃப் (Cross-Site Request Forgery) வெளிப்புற தள கோரிக்கைகளுடன் குக்கீகள் இணைக்கப்படும் போது வரம்பிடுவதன் மூலம் தாக்குதல்கள். SameSite ஐ ஸ்ட்ரிக்ட் அல்லது லாக்ஸ் என அமைப்பதன் மூலம், டெவலப்பர்கள் அங்கீகரிக்கப்படாத தளங்களை பயனரின் குக்கீகளைப் பயன்படுத்துவதைத் தடுக்கலாம், ஒட்டுமொத்த பாதுகாப்பு மற்றும் தனியுரிமையை மேம்படுத்தலாம்.
JavaScript குக்கீகள் பற்றி அடிக்கடி கேட்கப்படும் கேள்விகள்
- என்ன செய்கிறது Date.now() திரும்ப?
- Date.now() தற்போதைய நேர முத்திரையை மில்லி விநாடிகளில் வழங்குகிறது, இது தனித்துவமான குக்கீ பெயர்களை உருவாக்க பயன்படுகிறது.
- ஜாவாஸ்கிரிப்ட்டில் குக்கீகளை எவ்வாறு பாதுகாப்பது?
- நீங்கள் சேர்ப்பதன் மூலம் குக்கீகளைப் பாதுகாக்கலாம் HttpOnly மற்றும் Secure பண்புக்கூறுகள், இது ஜாவாஸ்கிரிப்ட் அணுகலைத் தடுக்கிறது மற்றும் HTTPS மூலம் பரிமாற்றத்தை உறுதி செய்கிறது.
- இடையே என்ன வித்தியாசம் max-age மற்றும் expires?
- max-age குக்கீயின் வாழ்நாளை நொடிகளில் அமைக்கிறது expires சரியான காலாவதி தேதி மற்றும் நேரத்தைக் குறிப்பிட உங்களை அனுமதிக்கிறது.
- எப்படி செய்கிறது SameSite பண்பு வேலை?
- தி SameSite CSRF தாக்குதல்களுக்கு எதிராக குக்கீகள் குறுக்கு-தள கோரிக்கைகளுடன் அனுப்பப்படுகிறதா என்பதை பண்புக்கூறு கட்டுப்படுத்துகிறது.
- Node.js உடன் குக்கீகளை சர்வர் பக்கமாக அமைக்க முடியுமா?
- ஆம், நீங்கள் பயன்படுத்தலாம் res.cookie() சேவையக பக்கத்தில் குக்கீகளை அமைக்க Node.js இல் செயல்பாடு.
ஜாவாஸ்கிரிப்ட் குக்கீ உருவாக்கம் பற்றிய இறுதி எண்ணங்கள்
ஜாவாஸ்கிரிப்ட் மூலம் டைனமிக் குக்கீகளை உருவாக்க, அதன் சரியான பயன்பாடு தேவை தேதி.இப்போது() வரையறுக்கப்படாத முடிவுகளைத் தவிர்ப்பதற்கான செயல்பாடு. நேர முத்திரையைச் சரியாகப் பயன்படுத்துவதன் மூலம், ஒவ்வொரு குக்கீ பெயரும் தனித்துவமானது என்பதை உறுதிசெய்கிறீர்கள், இது பயனுள்ள அமர்வு நிர்வாகத்திற்கு முக்கியமானது.
கூடுதலாக, HttpOnly, Secure மற்றும் SameSite போன்ற பண்புகளைப் பயன்படுத்தி குக்கீகளைப் பாதுகாப்பது அவசியம். இந்த நடைமுறைகள் குக்கீகளின் தனியுரிமை மற்றும் பாதுகாப்பு இரண்டையும் மேம்படுத்துகின்றன, குறிப்பாக நவீன வலைப் பயன்பாடுகளில் முக்கியமான பயனர் தரவைக் கையாளும் போது.
ஜாவாஸ்கிரிப்ட் குக்கீ உருவாக்கத்திற்கான குறிப்புகள் மற்றும் ஆதாரங்கள்
- எப்படி பயன்படுத்துவது என்பதை இந்த ஆதாரம் விளக்குகிறது தேதி.இப்போது() பல்வேறு பயன்பாடுகளுக்கான தனித்துவமான நேர முத்திரைகளை உருவாக்க JavaScript இல். மேலும் விவரங்களைக் காணலாம் MDN Web Docs: Date.now() .
- முன்-இறுதி மற்றும் பின்-இறுதி முறைகளைப் பயன்படுத்தி குக்கீகளை அமைப்பதற்கும் நிர்வகிப்பதற்கும் ஒரு ஆழமான வழிகாட்டி ஜாவாஸ்கிரிப்ட் மற்றும் Node.js இல் காணலாம் Express.js: res.cookie() .
- HttpOnly, Secure மற்றும் SameSite கொடிகள் உட்பட குக்கீகள் தொடர்பான பாதுகாப்பு சிறந்த நடைமுறைகளுக்கு, பார்வையிடவும் OWASP: பாதுகாப்பான குக்கீ பண்புக்கூறு .