জাভাস্ক্রিপ্টে নাম দিয়ে একটি কুকি পড়ার জন্য সবচেয়ে ছোট কাজ কী?


194

জাভাস্ক্রিপ্টে একটি কুকি পড়ার জন্য সবচেয়ে সংক্ষিপ্ত, সঠিক এবং ক্রস ব্রাউজারের সামঞ্জস্য পদ্ধতি কী?

খুব প্রায়শই, একা একা স্ক্রিপ্ট তৈরি করার সময় (যেখানে আমার কোনও বাইরের নির্ভরতা থাকতে পারে না), আমি নিজেকে কুকিজ পড়ার জন্য একটি ফাংশন যুক্ত করতে দেখি এবং সাধারণত কির্কসমোড.অর্গreadCookie() পদ্ধতিতে পড়ে যাই (২৮০ বাইট, ২১6 মিনিট করা হয়েছে।)

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

এটি কাজটি করে তবে এটি কুৎসিত এবং প্রতিবার বেশ কিছুটা ফোলা যোগ করে।

JQuery.cookie পদ্ধতিটি এমন কিছু ব্যবহার করে (সংশোধিত, 165 বাইট, 125 মিনিটযুক্ত):

function read_cookie(key)
{
    var result;
    return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? (result[1]) : null;
}

নোট করুন এটি কোনও 'কোড গল্ফ' প্রতিযোগিতা নয়: আমি আমার রিডকুকির ক্রিয়াকলাপের আকার হ্রাস করতে বৈধভাবে আগ্রহী এবং আমার কাছে সমাধানটি বৈধ কিনা তা নিশ্চিত করতে।


8
সঞ্চিত কুকি ডেটা এক ধরণের কুৎসিত, সুতরাং এগুলি হ্যান্ডেল করার যে কোনও পদ্ধতি সম্ভবত একইভাবে হবে।
এমভিসিএইচআর

4
@ এমভিসিএইচআর গুরুত্ব সহকারে। কোন পর্যায়ে সিদ্ধান্ত নেওয়া হয়েছিল যে একটি আধা-কোলনের সীমাবদ্ধ স্ট্রিং থেকে কুকিজ অ্যাক্সেস করা উচিত? কখন যে একটি ভাল ধারণা ছিল?
ইয়াহেল

7
কেন এই প্রশ্ন এখনও খোলা এবং কেন এটি একটি অনুগ্রহ আছে? আপনি কি সম্ভবত 5 বাইট সংরক্ষণ করতে মরিয়া ???
মার্ক কাহন

কুকিআর = ডকুমেন্ট.কুকি.স্প্লিট (';')। মানচিত্র (সি কে => {রিটার্ন {[সি কে.স্প্লিট ('=') [0]। ত্রিম ()): সি কে.স্প্লিট ('=') [1] }})
vladimir.gorea

উত্তর:


197

বর্তমানের সেরা-ভোট দেওয়া উত্তরের চেয়ে খাটো, আরও নির্ভরযোগ্য এবং আরও পারফরম্যান্ট:

function getCookieValue(a) {
    var b = document.cookie.match('(^|;)\\s*' + a + '\\s*=\\s*([^;]+)');
    return b ? b.pop() : '';
}

বিভিন্ন পদ্ধতির একটি পারফরম্যান্স তুলনা এখানে দেখানো হয়েছে:

http://jsperf.com/get-cookie-value-regex-vs-array-functions

যোগাযোগের কিছু নোট:

রেজেক্স পদ্ধতির সর্বাধিক ব্রাউজারগুলিতে কেবল দ্রুত নয়, এটি স্বল্পতম ফাংশনও দেয়। অতিরিক্তভাবে এটি উল্লেখ করা উচিত যে অফিশিয়াল স্পেক (আরএফসি 2109) অনুসারে , সেমিকোলনের পরে যে স্থানটি ডকুমেন্ট-কুকিতে কুকিজকে পৃথক করে .চ্ছিক এবং একটি যুক্তি তৈরি করা যেতে পারে যে এটি নির্ভর করা উচিত নয়। তদ্ব্যতীত, সমান চিহ্ন (=) এর আগে ও পরে সাদা স্থানকে অনুমতি দেওয়া হয় এবং একটি যুক্তি তৈরি করা যেতে পারে যে এই সম্ভাব্য শ্বেত স্পেসটি কোনও নির্ভরযোগ্য ডকুমেন্ট.কুকি পার্সারে সংযুক্ত করা উচিত। উপরের রেগেক্স উপরোক্ত সাদা স্থানের উভয় শর্তের জন্য অ্যাকাউন্ট করে।


4
আমি সবেমাত্র লক্ষ্য করেছি যে ফায়ারফক্সে, আমি উপরে পোস্ট করা রেজেক্স পদ্ধতির লুপিং পদ্ধতির মতো পারফরম্যান্স নয়। আমি আগে চালিত পরীক্ষাগুলি ক্রোমে সম্পন্ন হয়েছিল, যেখানে রেইজেক্স পদ্ধতির অন্যান্য পদ্ধতির চেয়ে বিনয়ের চেয়ে ভাল সঞ্চালিত হয়েছিল। যাইহোক, এটি এখনও সবচেয়ে সংক্ষিপ্ত যা প্রশ্ন জিজ্ঞাসা করা হচ্ছে এর ঠিকানা দেয়।
ম্যাক

6
কেন getCookieValue(a, b)প্যারামিটার লাগে b?
ব্রেন্ট ওয়াশবার্ন

15
উত্সাহিত, তবে পাঠযোগ্যতার জন্য নয় ... আমাকে কী করতে হবে aএবং কী তা বের করতে কিছুটা সময় নিয়েছে b
জিগি

9
চালাক, তবে নির্বোধ এটি লিখতে 1 বাইট সংরক্ষণ করুন।
মাফিন ম্যান

5
aপ্যারামিটারটি রেগেক্স পালিয়ে যায় না, যদিও এটি কার্যকর হতে পারে তবে এটি নিরাপদ নয়। এই জাতীয় জিনিসগুলি getCookieValue('.*')কোনও এলোমেলো কুকি ফিরিয়ে দেবে
ভিটিম.ইস

185

এটি কেবল একবারই ডকুমেন্ট.কুকিকে আঘাত করবে। পরবর্তী প্রতিটি অনুরোধ তাত্ক্ষণিক হবে।

(function(){
    var cookies;

    function readCookie(name,c,C,i){
        if(cookies){ return cookies[name]; }

        c = document.cookie.split('; ');
        cookies = {};

        for(i=c.length-1; i>=0; i--){
           C = c[i].split('=');
           cookies[C[0]] = C[1];
        }

        return cookies[name];
    }

    window.readCookie = readCookie; // or expose it however you want
})();

আমি আশঙ্কা করছি যে এই সাধারণ যুক্তির চেয়ে দ্রুততর আর কোনও উপায় নেই যদি না আপনি .forEachব্রাউজার নির্ভর যেটি ব্যবহার করতে মুক্ত হন (তবুও আপনি এতটা সঞ্চয় করছেন না)

আপনার নিজের উদাহরণটি সামান্য সংকুচিত 120 bytes:

function read_cookie(k,r){return(r=RegExp('(^|; )'+encodeURIComponent(k)+'=([^;]*)').exec(document.cookie))?r[2]:null;}

আপনি এটা পেতে পারেন 110 bytesযদি আপনি এটি একটি 1 অক্ষর ফাংশনের নাম করতে, 90 bytesযদি আপনি ড্রপ encodeURIComponent

আমি এটিকে নামিয়ে রেখেছি 73 bytes, তবে ন্যায্যতার সাথে এটি 82 bytesনামকরণ করা হয় readCookieএবং 102 bytesকখন যুক্ত করা হয় encodeURIComponent:

function C(k){return(document.cookie.match('(^|; )'+k+'=([^;]*)')||0)[2]}

আমি রিটার্নের স্টেটমেন্টটি ভুলে গেছি, শীশ বন্ধ হওয়ার কিছু নেই।
মার্ক কাহন

3
...কি? ডিফ বলছে আপনি করেছেন। d.pr/sSte এটা ছিল না ()শেষে কল, তাই এটি একটি বেনামী ফাংশন সংজ্ঞায়িত গেছে তবে এটি নির্বাহ না।
ইয়াহেল

2
আপনি এখানে যান: jsperf.com/pre-increment-vs-post-increment আমি সঠিক ছিলাম, ++ আমি দ্রুত, কমপক্ষে যদি আপনি আগে এবং পরে মান পান। এবং এটি লুপের জন্য আপনি যা করেন।
xavierm02

1
একটি গুরুত্বপূর্ণ বিষয়: যেহেতু "কুকিজ" এর মান ক্যাশে করা হয়েছে, অন্য উইন্ডো বা ট্যাবগুলি থেকে নতুন কুকিজ বা পরিবর্তিত কুকিজ দৃশ্যমান হবে না। আপনি ভেরিয়েবলটিতে ডকুমেন্ট.কুকি থেকে স্ট্রিং-মান সংরক্ষণ করে এই সমস্যাটি এড়াতে পারেন এবং এটি প্রতিটি অ্যাক্সেসে অপরিবর্তিত কিনা তা পরীক্ষা করতে পারেন।
Andreas

2
@ স্টিজেডেভিট - কীভাবে প্রশ্নের উত্তর দেয় না ? 73 বাইট আপনার জন্য যথেষ্ট সংক্ষিপ্ত নয়? :) আমার কাছে শেষ উত্তরটি নীচে একটিটির মতোই রয়েছে , কিছু শ্বেত স্পেস চেক বাদে, এলওএল
মার্ক কান

20

অনুমিতি

প্রশ্নের ভিত্তিতে, আমি বিশ্বাস করি যে এই ফাংশনটির জন্য কিছু অনুমান / প্রয়োজনীয়তার মধ্যে রয়েছে:

  • এটি একটি লাইব্রেরির ফাংশন হিসাবে ব্যবহৃত হবে , এবং তাই কোনও কোডবেসে ফেলে দেওয়া হবে;
  • সেই হিসাবে এটির জন্য বিভিন্ন বিভিন্ন পরিবেশে কাজ করা দরকার , যেমন লিগ্যাসি জেএস কোড, বিভিন্ন স্তরের মানের সিএমএস ইত্যাদির সাথে কাজ করা;
  • অন্যান্য ব্যক্তিদের দ্বারা লিখিত কোড এবং / অথবা আপনার নিয়ন্ত্রণ নেই এমন কোডের সাথে আন্তঃচালনা করতে, ফাংশনটিতে কুকির নাম বা মানগুলি কীভাবে এনকোড করা হয় সে সম্পর্কে কোনও অনুমান করা উচিত নয় । স্ট্রিং সহ ফাংশনটি কল করার সাথে "foo:bar[0]""foo: বার [0]" নামের একটি কুকি (আক্ষরিক) ফিরিয়ে দেওয়া উচিত;
  • পৃষ্ঠার জীবদ্দশায় যে কোনও সময়ে নতুন কুকিগুলি লিখিত হতে পারে এবং / অথবা বিদ্যমান কুকিজগুলি সংশোধিত হতে পারে

এই অনুমানের অধীনে, এটি পরিষ্কার যে encodeURIComponent/ decodeURIComponent ব্যবহার করা উচিত নয় ; এটি করার ফলে ধরে নেওয়া হয় যে কুকি সেট করা কোডটি এই ফাংশনগুলি ব্যবহার করে এটি এনকোড করেছে।

যদি কুকির নামটিতে বিশেষ অক্ষর থাকতে পারে তবে নিয়মিত এক্সপ্রেশন পদ্ধতির সমস্যা হয়। jQuery.cookie কুকি সংরক্ষণ করার সময় কুকির নাম (আসলে নাম এবং মান উভয়) এনকোড করে এবং একটি কুকি পুনরুদ্ধার করার পরে নামটি ডিকোড করে এই সমস্যাটির চারপাশে কাজ করে। একটি নিয়মিত প্রকাশের সমাধান নীচে।

আপনি যদি কেবল কুকিগুলি সম্পূর্ণরূপে নিয়ন্ত্রণ করেন তবে আপনি সরাসরি কুকিগুলি পড়তেdocument.cookie এবং ফলাফলগুলি ক্যাশে না করার পরামর্শ দেওয়া হবে , কারণ ক্যাশেটি document.cookieআবার না পড়লে অবৈধ কিনা তা জানার উপায় নেই ।

(অ্যাক্সেস এবং পার্সিং যখন document.cookiesক্যাশে ব্যবহারের চেয়ে কিছুটা ধীর হবে তবে এটি ডিওএমের অন্যান্য অংশগুলি পড়ার মতো ধীর হবে না, যেহেতু কুকিজ DOM / রেন্ডার গাছগুলিতে ভূমিকা রাখে না))


লুপ-ভিত্তিক ফাংশন

পিপিকে (লুপ-ভিত্তিক) ফাংশনের উপর ভিত্তি করে কোড গল্ফ উত্তরটি এখানে দেয়:

function readCookie(name) {
    name += '=';
    for (var ca = document.cookie.split(/;\s*/), i = ca.length - 1; i >= 0; i--)
        if (!ca[i].indexOf(name))
            return ca[i].replace(name, '');
}

যা ছোট করা হলে, 128 টি অক্ষরে আসে (ফাংশনটির নাম গণনা করা হয় না):

function readCookie(n){n+='=';for(var a=document.cookie.split(/;\s*/),i=a.length-1;i>=0;i--)if(!a[i].indexOf(n))return a[i].replace(n,'');}

নিয়মিত প্রকাশ-ভিত্তিক ফাংশন

আপডেট: আপনি যদি সত্যিই নিয়মিত প্রকাশের সমাধান চান:

function readCookie(name) {
    return (name = new RegExp('(?:^|;\\s*)' + ('' + name).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') + '=([^;]*)').exec(document.cookie)) && name[1];
}

এই পালাতে RegExp অবজেক্ট নির্মাণের আগে কুকি নামে কোনো বিশেষ অক্ষর। Minified, এটি 134 টি অক্ষরে আসে (ফাংশনটির নাম গণনা করছে না):

function readCookie(n){return(n=new RegExp('(?:^|;\\s*)'+(''+n).replace(/[-[\]{}()*+?.,\\^$|#\s]/g,'\\$&')+'=([^;]*)').exec(document.cookie))&&n[1];}

রুদু এবং কোলভস যেমন মন্তব্যগুলিতে উল্লেখ করেছেন, নিয়মিত-এক্সপ্রেশন-অব্যাহতি রেজেক্স কয়েকটি চরিত্র দ্বারা সংক্ষিপ্ত করা যেতে পারে। আমি মনে করি অব্যাহতিমান রেজেক্সকে ধারাবাহিকভাবে রাখা ভাল হবে (আপনি এটি অন্য কোথাও ব্যবহার করতে পারেন) তবে তাদের পরামর্শগুলি বিবেচনা করার মতো।


মন্তব্য

এই উভয় ফাংশন হ্যান্ডেল করবে না nullবা undefined, যদি "নাল" নামে কোনও কুকি থাকে তবে readCookie(null)এর মানটি ফিরিয়ে দেবে। আপনার যদি এই কেসটি পরিচালনা করতে হয় তবে সেই অনুযায়ী কোডটি মানিয়ে নিন।


#\sআপনার প্রতিস্থাপন-রেজেক্সের শেষে কী সুবিধা হবে ? সেই জেনেরিক /[[\]{}()*+?.\\^$|]/gencodeURIComponent/[()*.\\]/g
রিপ্লেসটি

@ রুডু যে রেজেেক্স-এস্কেটিং রেইজেক্সটি সাইমন উইলিসন থেকে এসেছে এবং এটি এক্সরেগএক্সপ্রেস লাইব্রেরি দ্বারা ব্যবহৃত হয় । এটি জেনেরিক কেসের জন্য বোঝানো হয়েছে (উদাহরণস্বরূপ যদি আপনি তা করেন new RegExp('[' + str + ']')তবে আপনি পালাতে চান -), সুতরাং আপনি সম্ভবত এটি সঠিক হবেন যে এটি ছোট করা যেতে পারে। যেহেতু এটি কেবলমাত্র কয়েকটি বাইট সংরক্ষণ করতে পারে এবং অতিরিক্ত অক্ষরগুলি পালিয়ে যাওয়া চূড়ান্ত রেজেক্সকে প্রভাবিত করে না, তাই আমি এটি যেমন আছে তেমন ছেড়ে যেতে চাইছি।
জেফারি

@ রুদু এছাড়াও আমি encodeURIComponent()এই ক্ষেত্রে এড়াতে পারি কারণ আমার ধারণা ওপি একটি জেনেরিক ফাংশন খুঁজছে যা কোনও কুকির নাম নিয়ে কাজ করতে পারে। যদি তৃতীয় পক্ষের কোডটি "foo: বার" নামে একটি কুকি সেট করে, encodeURIComponent()তার অর্থ "foo% 3Abar" নামের একটি কুকি পড়ার চেষ্টা করা হবে।
জেফারি

আমি জানি কোডটি কোথা থেকে এসেছে - এটি নিখুঁত নয় (রূপান্তরিত a<tab>bহবে a\<tab>b... যা কোনও বৈধ অব্যাহতি নয়, যদিও \<space>)। এবং # এর জেএস রেজেক্স
রুদু

1
তৃতীয় অংশের লাইব্রেরিগুলি প্রচুর ব্যবহার করে encodeURIComponent, যদি কোনও কুকির নাম দেওয়া হয় foo=তবে foo%3Dএটি একইভাবে নামটি এনকোডিং না করে সংরক্ষণ করা হবে যা আপনি এটি খুঁজে পাবেন না (আপনার কোড এটি খুঁজে পাবে না) - এর সঠিক কোনও উত্তর নেই। আপনি যদি কুকিগুলি কীভাবে স্থাপন করেন তা যদি আপনি নিয়ন্ত্রণ করতে পারেন তবে উত্তরটি সহজ করতে পারবেন / তা বেরিয়ে আসার জন্য অনুমানগুলি তৈরি করতে পারেন। সবচেয়ে সহজ / সর্বোত্তম হ'ল কুকির নামের জন্য কেবল a-zA-Z0-9 ব্যবহার করা encodeURIComponentএবং পুরোটি এবং রেজিএক্সপ্যাকের পালানোর ঝামেলা এড়ানো । কিন্তু আপনি এখনও সম্পর্কে চিন্তা করার প্রয়োজন হতে পারে decodeURIComponentউপর কুকি মান যেহেতু একটি প্রস্তাবিত অভ্যাস।
রুদু

14

গুগল অ্যানালিটিক্স ga.js থেকে কোড

function c(a){
    var d=[],
        e=document.cookie.split(";");
    a=RegExp("^\\s*"+a+"=\\s*(.*?)\\s*$");
    for(var b=0;b<e.length;b++){
        var f=e[b].match(a);
        f&&d.push(f[1])
    }
    return d
}

আমি শেষ লাইনটি পরিবর্তন করেছি return d[0];এবং তারপরে আমি if (c('EXAMPLE_CK') == null)কুকি সংজ্ঞায়িত না হয় কিনা তা পরীক্ষা করে দেখতাম ।
ইলেক্ট্রয়েড

9

এটা কেমন?

function getCookie(k){var v=document.cookie.match('(^|;) ?'+k+'=([^;]*)(;|$)');return v?v[2]:null}

ফাংশনটির নাম ব্যতীত 89 বাইট গণনা করা হয়েছে।


চতুর উত্তর। যথাযথ. আরও upvotes প্রাপ্য। স্বচ্ছতার জন্য kনাম দেওয়া যেতে পারেkey , তবে যাই হোক না কেন।
জেরোল্ডব্রোজার মনিকা

ধন্যবাদ :-) এখন পর্যন্ত, গৃহীত উত্তরটি আপডেট হয়েছিল এবং এতে একটিও রয়েছে। তবে মাত্র 73 টি অক্ষর সহ আরও কিছুটা সংকুচিত আকারে।
সাইমন স্টেইনবার্গার

সুতরাং, আপনি সংক্ষিপ্ততার লক্ষ্যে নিচ্ছেন, আমি দেখছি। কেন করা হয় না প্রহেলিকা & কোড গলফ প্রোগ্রামিং উপর আপনার সাইট তালিকা তারপর ... এখনো? আনন্দ কর! এবং, বিটিডাব্লু, আমিও একজন পর্বতারোহী। বার্গ হিল! ;)
জেরলড ব্রোজার মনিকা

4

এখানে যায় .. চিয়ার্স!

function getCookie(n) {
    let a = `; ${document.cookie}`.match(`;\\s*${n}=([^;]+)`);
    return a ? a[1] : '';
}

মনে রাখবেন যে আমি ইজে 6 এর টেম্পলেট স্ট্রিংগুলি ব্যবহার করে রেগেজ এক্সপ্রেশনটি রচনা করতে পারি।


3

এটি কোনও অবজেক্টে যা আপনি কুকিজ পড়তে, লিখতে, ওভার রাইট করতে এবং মুছতে পারেন।

var cookie = {
    write : function (cname, cvalue, exdays) {
        var d = new Date();
        d.setTime(d.getTime() + (exdays*24*60*60*1000));
        var expires = "expires="+d.toUTCString();
        document.cookie = cname + "=" + cvalue + "; " + expires;
    },
    read : function (name) {
        if (document.cookie.indexOf(name) > -1) {
            return document.cookie.split(name)[1].split("; ")[0].substr(1)
        } else {
            return "";
        }
    },
    delete : function (cname) {
        var d = new Date();
        d.setTime(d.getTime() - 1000);
        var expires = "expires="+d.toUTCString();
        document.cookie = cname + "=; " + expires;
    }
};

1

এই উভয় ফাংশন কুকি পড়ার ক্ষেত্রে সমানভাবে বৈধ দেখায়। আপনি কয়েকটি বাইট ছাঁটাই করতে পারেন যদিও (এবং এটি সত্যই এখানে কোড গল্ফ অঞ্চলে প্রবেশ করছে):

function readCookie(name) {
    var nameEQ = name + "=", ca = document.cookie.split(';'), i = 0, c;
    for(;i < ca.length;i++) {
        c = ca[i];
        while (c[0]==' ') c = c.substring(1);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length);
    }
    return null;
}

আমি এটি দিয়ে যা করেছি তা হ'ল সমস্ত ভেরিয়েবলের ঘোষণাকে এক ভেরি স্টেটমেন্টে ভেঙে ফেলা, সাবস্ট্রিংয়ের কলগুলিতে অপ্রয়োজনীয় দ্বিতীয় যুক্তি সরিয়ে ফেলা হয়েছে এবং একটি চরআউট কলকে অ্যারে ডিরিফারেন্সে প্রতিস্থাপন করা হবে।

এটি এখনও আপনার সরবরাহিত দ্বিতীয় ফাংশনের মতো সংক্ষিপ্ত নয়, তবে এটিতে কয়েক বাইট ছাড়ানো যেতে পারে:

function read_cookie(key)
{
    var result;
    return (result = new RegExp('(^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? result[2] : null;
}

আমি নিয়মিত প্রকাশের প্রথম উপ-এক্সপ্রেশনটি ক্যাপচারিং সাব-এক্সপ্রেশন হিসাবে পরিবর্তন করেছি এবং ফলাফলটি [1] অংশে পরিবর্তিত করেছি [2] এই পরিবর্তনের সাথে মিলে যেতে; ফলাফলের অপ্রয়োজনীয় প্যারেনগুলিও সরিয়ে ফেলেছে [২]।


1

যথাসম্ভব ব্লট সরিয়ে ফেলতে, মোড়ক ফাংশনটি ব্যবহার না করে বিবেচনা করুন:

try {
    var myCookie = document.cookie.match('(^|;) *myCookie=([^;]*)')[2]
} catch (_) {
    // handle missing cookie
}

যতক্ষণ আপনি রেজিএক্সের সাথে পরিচিত, ততক্ষণ কোডটি যথাযথভাবে পরিষ্কার এবং সহজেই পড়া সহজ।


0

(সম্পাদনা করুন: প্রথমে ভুল সংস্করণটি পোস্ট করা হয়েছে .. এবং এটিতে একটি অ-কার্যকরী একটি current বর্তমানকে আপডেট করা হয়েছে, যা অপ্রতিরোধী ফাংশনটি ব্যবহার করে যা দ্বিতীয় উদাহরণের মতো))

প্রথম উদাহরণ cwolves মধ্যে দুর্দান্ত ধারণা। আমি উভয়টি মোটামুটি কমপ্যাক্ট কুকি পাঠ / লেখার ফাংশনের জন্য তৈরি করেছি যা একাধিক সাবডোমেনগুলি জুড়ে কাজ করে। অনুভূত যে আমি অন্য কেউ যদি এই থ্রেডটি সন্ধান করে তবে সেটিকে ভাগ করে নেব।

(function(s){
  s.strToObj = function (x,splitter) {
    for ( var y = {},p,a = x.split (splitter),L = a.length;L;) {
      p = a[ --L].split ('=');
      y[p[0]] = p[1]
    }
    return y
  };
  s.rwCookie = function (n,v,e) {
    var d=document,
        c= s.cookies||s.strToObj(d.cookie,'; '),
        h=location.hostname,
        domain;
    if(v){
      domain = h.slice(h.lastIndexOf('.',(h.lastIndexOf('.')-1))+1);
      d.cookie = n + '=' + (c[n]=v) + (e ? '; expires=' + e : '') + '; domain=.' + domain + '; path=/'
    }
    return c[n]||c
  };
})(some_global_namespace)
  • আপনি যদি আরডবুকি কিছুই না পাস করেন তবে এটি সমস্ত কুকি কুকি স্টোরেজে পাবেন
  • একটি কুকির নাম rwCookie পাস করেছে, এটি স্টোর থেকে সেই কুকির মান পায়
  • একটি কুকি মান পাস করেছে, এটি কুকি লিখেছে এবং স্টোরেজে মান রাখে
  • মেয়াদোত্তীর্ণকরণ সেশনে ডিফল্ট হয় যদি না আপনি একটি নির্দিষ্ট করে থাকেন

0

Cwolves এর উত্তর ব্যবহার করা হচ্ছে, তবে ক্লোজার বা প্রি-কম্পিউটেড হ্যাশ ব্যবহার করা হচ্ছে না:

// Golfed it a bit, too...
function readCookie(n){
  var c = document.cookie.split('; '),
      i = c.length,
      C;

  for(; i>0; i--){
     C = c[i].split('=');
     if(C[0] == n) return C[1];
  }
}

... এবং মিনিফাইং ...

function readCookie(n){var c=document.cookie.split('; '),i=c.length,C;for(;i>0;i--){C=c[i].split('=');if(C[0]==n)return C[1];}}

... সমান 127 বাইট।


0

জাভাস্ক্রিপ্ট স্ট্রিং ফাংশন ব্যবহার করে এখানে সহজ সমাধান is

document.cookie.substring(document.cookie.indexOf("COOKIE_NAME"), 
                          document.cookie.indexOf(";", 
                          document.cookie.indexOf("COOKIE_NAME"))).
  substr(COOKIE_NAME.length);

0

নিম্নলিখিত ফাংশনটি খালি স্ট্রিং এবং অপরিশোধিত কুকিজের মধ্যে পার্থক্য করার অনুমতি দেবে। অপরিজ্ঞাত কুকিগুলি সঠিকভাবে ফিরে আসবে undefinedএবং খালি স্ট্রিংটি অন্য উত্তরগুলির মতো কিছু নয়। তবে এটি আই 7 এবং নীচে কাজ করবে না, যেহেতু তারা স্ট্রিং সূচকগুলিতে অ্যারে অ্যাক্সেসের অনুমতি দেয় না।

    function getCookie(name) {
      return (document.cookie.match('(?:^|;) *'+name+'=([^;]*)')||"")[1];
    }

আপনি তালিকার তৃতীয় আইটেমটি কেন ফিরিয়ে দিচ্ছেন?
nasch

কারণ আমি প্রথম দলটিকে নন-ক্যাপচারিং করিনি। আমি কোড আপডেট করেছি।
জয়স বাবু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.