নাম দিয়ে কুকি পান


362

আমার কাছে একটি কুকির কাছ থেকে মান পেতে একটি গেটর রয়েছে।

নাম shares=এবং নাম দিয়ে এখন আমার কাছে 2 টি কুকি রয়েছে obligations=

আমি বাধ্যতামূলক কুকি থেকে মানগুলি পেতে এই গিটারটি তৈরি করতে চাই।

আমি এটা কিভাবে করবো? সুতরাং forতথ্য পৃথক মান মধ্যে বিভক্ত এবং একটি অ্যারে রাখে।

 function getCookie1() {
    // What do I have to add here to look only in the "obligations=" cookie? 
    // Because now it searches all the cookies.

    var elements = document.cookie.split('=');
    var obligations= elements[1].split('%');
    for (var i = 0; i < obligations.length - 1; i++) {
        var tmp = obligations[i].split('$');
        addProduct1(tmp[0], tmp[1], tmp[2], tmp[3]);
    }
 }

কিছু রজন আপনার কেবল এটি একটি অ্যারে করে না?
webLacky3rdClass

কুকিটিকে একটি অ্যারে বানানো আমার উচিত।
webLacky3rdClass

না, আমি কীভাবে এটি করতে পারি?


আপনি একটি উত্তর গ্রহণ করতে চাইতে পারেন: আপনার প্রশ্নটি এখনও উত্তরহীন হিসাবে ট্যাগ করা আছে।
সোলেইল - ম্যাথিউ প্রভোট

উত্তর:


499

একটি পদ্ধতির, যা অ্যারের মাধ্যমে পুনরাবৃত্তি এড়ানো যায়, তা হ'ল:

function getCookie(name) {
  const value = `; ${document.cookie}`;
  const parts = value.split(`; ${name}=`);
  if (parts.length === 2) return parts.pop().split(';').shift();
}

walkthrough

টোকেন দ্বারা একটি স্ট্রিং বিভক্ত করা হয় যে কোনও একটি স্ট্রিং (একই মান) সহ একটি অ্যারে উত্পাদন করবে, যদি টোকন একটি স্ট্রিংয়ের ক্ষেত্রে পাওয়া যায়, তবে টোকন কোনও স্ট্রিংয়ের সাথে উপস্থিত থাকে না বা দুটি স্ট্রিং সহ একটি অ্যারে তৈরি হয়।

প্রথম (বাম) উপাদানটি টোকেনের আগে যা ছিল তার স্ট্রিং এবং দ্বিতীয়টি (ডান) যা টোকেনের পরে যা ছিল তার স্ট্রিং।

(দ্রষ্টব্য: যদি স্ট্রিংটি একটি টোকেন দিয়ে শুরু হয় তবে প্রথম উপাদানটি খালি স্ট্রিং)

কুকিজ নিম্নলিখিত হিসাবে সংরক্ষণ করা হয়েছে তা বিবেচনা করে:

"{name}={value}; {name}={value}; ..."

নির্দিষ্ট কুকির মানটি পুনরুদ্ধার করার জন্য, আমাদের কেবল "; {নাম} =" এর পরে এবং পরবর্তী ";" এর পরে থাকা স্ট্রিংটি পাওয়া দরকার। আমরা কোনও প্রক্রিয়াজাতকরণের আগে, আমরা কুকিজের স্ট্রিংটিকে ";" দিয়ে আগেই সরবরাহ করি, যাতে প্রথমটি সহ প্রতিটি কুকির নাম ";" এবং "=" দিয়ে আবদ্ধ থাকে:

"; {name}={value}; {name}={value}; ..."

এখন, আমরা প্রথমে "; {নাম} =" দ্বারা বিভক্ত হয়ে যেতে পারি, এবং যদি টোকেনটি কোনও কুকি স্ট্রিংয়ে পাওয়া যায় (যেমন আমাদের দুটি উপাদান রয়েছে) তবে আমরা দ্বিতীয় উপাদানটির সাথে আমাদের কুকির মান দিয়ে শুরু হওয়া স্ট্রিংয়ের সাথে শেষ করব। তারপরে আমরা এটিকে একটি অ্যারে (অর্থাত্ পপ) থেকে বের করি এবং একই প্রক্রিয়াটি পুনরাবৃত্তি করি তবে এখন ";" দিয়ে একটি টোকেন হিসাবে, তবে এবার আসল টোকেন মান পেতে বাম স্ট্রিংটি (অর্থাত্ শিফট) বের করছে।


13
@ ব্যবহারকারী3132564 এটি এডিট করার চেষ্টা করেছিল, তবে এটি আসলে একটি মন্তব্য: আপনি যখন কোনও কুকির প্রত্যয় অনুসন্ধান করবেন তখন এই পদ্ধতিটি ভুল মানটি দেয় - যদি ডকুমেন্ট.কুকির মান "ফার্স্টনাম = জন" হয় এবং আপনি getCookie ("নাম") কল করেন "), এই নামটি দিয়ে কোনও কুকি না থাকলেও আপনি" জন "ফিরে পাবেন। যদি কোনও কুকির নাম অন্যটির প্রত্যয় হয় তবে এটিও কাজ করে না - যদি ডকুমেন্ট.কুকিকে "নাম = জন; লাস্টনাম = ডু" বলা হয়, বিভক্তিকে কল করা হয় ("নাম =") তিনটি স্ট্রিং সহ একটি অ্যারে ফেরত দেয় এবং পদ্ধতিটি না করায় টি getCookie ("নাম") এর জন্য সঠিক মানটি ফিরিয়ে দেবে না।
ডেনিস জাহেরুদ্দিন

20
এই উত্তরে বাস্তবায়নের বিষয়ে সতর্কতা: যদি একই নামে একাধিক কুকি থাকে তবে কোনও কুকির মান ফিরে আসবে না। উদাহরণস্বরূপ, যদি ডোমেন .stackexchange.com পাশাপাশি প্রোগ্রামারস.স্ট্যাকেক্সচেঞ্জ.কমের জন্য স্ট্যাকটোকেন সেট নামের একটি কুকি থাকে তবে আপনি যদি getCookie ("স্ট্যাকটোকেন") কল করেন তবে মানটি ফিরে আসবে না - অংশ.সংশ্লিষ্টতা 2 এর চেয়ে বেশি হবে be আপনি একই নামের জন্য সব কুকি মান জেনে থাকেন (কিন্তু বিভিন্ন ডোমেইন এবং পথ) একই হবে, গৃহীত উত্তর এখানে দেখুন: stackoverflow.com/questions/5639346/...
jlpp

7
@ ডেনিসজাহেরউদ্দিন - দেখে মনে হচ্ছে প্রত্যয়ের বিষয়টি স্থির হয়ে গেছে।
নাথান জেবি

2
@ নাথানজ.ব্রেউয়ের আপনি সঠিক দীর্ঘদিন আগে এই সমস্যার সমাধানের জন্য আপডেট করা হয়েছে, তবে মন্তব্যের পরিবর্তে শুধুমাত্র চেঞ্জলগে একটি নোট তৈরি করেছে।
কিরলিচ

এটির একটি দোষ আছে। কুকি যদি "নাম" হয় এবং নামের মতো অন্যটিতে আন্ডারলাইন করে IE 10+তবে একটি ত্রুটি দেয়। উদাহরণ: "user": "Joe", "user_name":"Doe"
Boz

176

আমি কুকিতে একক নিয়মিত অভিব্যক্তি ম্যাচ ব্যবহার করতে পছন্দ করব:

window.getCookie = function(name) {
  var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
  if (match) return match[2];
}

বা এছাড়াও আমরা একটি ফাংশন হিসাবে ব্যবহার করতে সক্ষম, নীচের কোড চেক।

function check_cookie_name(name) 
    {
      var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
      if (match) {
        console.log(match[2]);
      }
      else{
           console.log('--something went wrong---');
      }
   }

মন্তব্যগুলিতে স্কট জাংওয়ার্থের ধন্যবাদ উন্নত।


11
যদি দুটি কুকির একই প্রত্যয় থাকে তবে এর সাথে মিথ্যা মিল থাকতে পারে। এটি উভয় xyz=valueএবং abcxyz=valueকখন মিলবে name = xyz
ব্রেন্ট ওয়াশবার্ন


19
আপডেটের Regex করার new RegExp('(^| )' + name + '=([^;]+)')@BrentWashburne দ্বারা উত্থাপিত ইস্যু এড়ানো। এছাড়াও আমি এর জন্য একটি জাসস্পিফ পরীক্ষা করেছি এবং সর্বাধিক ভোটের সাথে উত্তর দিয়েছি, এটি একটি সামান্য উপরে উঠে আসে তবে এটি অবশ্যই কম কোড এবং অনুসরণ করা সহজ: jsperf.com/simple-get-cookie-by-name
স্কট

5
@ স্কটজংথ্রিথ হ্যাঁ, তবে তারপরে ম্যাচটি ফিরতে আপনাকে অবশ্যই রিটার্ন স্টেটমেন্ট আপডেট করতে হবে [২];
জো

@ScottJungwirth কেন নয় new RegExp('(^|;)' + name + '=([^;]+)')? nameএকটি লাইন বা সেমিকোলন, কেন একটি স্থান `শুরুর পিছনে?
জুনলিন

89

একটি কুকি প্রাপ্ত স্ক্রিপ্ট ব্যবহার করুন:

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;
}

তারপরে এটিকে কল করুন:

var value = readCookie('obligations');

আমি quirksmode কুকিজ পৃষ্ঠা থেকে উপরের কোড চুরি। আপনার এটি পড়া উচিত


7
... যা ডাব্লু 3 স্কুল থেকে কোড চুরি করেছে। কি দারুন. w3schools.com/js/js_cookies.asp
উইলওয়েম

আরে, কমপক্ষে আমি ক্রেডিট দিয়েছিলাম: পি এছাড়াও আপনি কীভাবে জানবেন যে একটি আসল ছিল?
mkoryak

এটি ডাব্লু 3 এসটিকে প্রথমে সেখানে রাখার ধারণা করা নিরাপদ। তারা ctrl-c কোড করে এমন অনেক নবজাতকের বাড়িতে c
উইলওয়াম

প্রকৃতপক্ষে দেখে মনে হচ্ছে এটি অন্য উপায়ে রয়েছে :) কিরকসমোডটি ব্রাউজার কুইর্কের জন্য দুর্দান্ত সাইট ছিল এবং সেখানে একটি উত্সও রয়েছে। scottandrew.com
sunn0

আমি w3schools পছন্দ করি। সিনিয়রদের জন্য সম্ভবত সেরা প্ল্যাটফর্ম
র‌্যাল্ফ ডিঙ্গাস

56

আপনি যদি jQuery ব্যবহার করেন তবে আমি আপনাকে এই প্লাগইনটি ব্যবহার করার পরামর্শ দিচ্ছি:

https://github.com/c टका tl/ jquery- cookie https://github.com/c टका tl/jquery- cookie/ blob/ master/
jquery.cookie.js

<script type="text/javascript"
 src="//cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js">

সুতরাং আপনি এই মত কুকি পড়তে পারেন:

var value = $.cookie("obligations");

এছাড়াও আপনি কুকি লিখতে পারেন:

$.cookie('obligations', 'new_value');
$.cookie('obligations', 'new_value', { expires: 14, path: '/' });

কুকি মুছুন:

$.removeCookie('obligations');

1
নিশ্চিত কেন এটি সত্য উত্তর সবচেয়ে ভাল ভোট হয়েছে না। হ্যাঁ এর jQuery এবং জাভাস্ক্রিপ্ট নয় একই সাথে এটি আইটি !!!!
কোজবি

21
@ কোজবি সম্ভবত সম্ভবত একটি কুকির মান আনতে একটি বাহ্যিক গ্রন্থাগার (যার মাধ্যমে অন্য একটি http অনুরোধ যুক্ত করে) অন্তর্ভুক্ত করা এক ধরনের অপ্রয়োজনীয় ওভারকিল is
rahulserver

আমি "ত্রুটিযুক্ত রেফারেন্স এরর: একটি error" c। কুকি "এ সংজ্ঞায়িত করা হয়নি error যদিও আমি jquery.min.js এর মতো প্রয়োজনীয় সমস্ত লাইব্রেরি এবং এই উত্তরে প্রস্তাবিত লাইব্রেরি অন্তর্ভুক্ত করেছি।
আদর্শ সিং

44

নিয়মিত প্রকাশ প্রকাশ করে এমন কয়েকটি উত্তরগুলির পদ্ধতিগুলি সমস্ত ক্ষেত্রে কভার করে না particularly

  1. কুকি যখন শেষ কুকি হয়। এক্ষেত্রে কুকি মানের পরে কোনও সেমিকোলন থাকবে না।
  2. নামটি সন্ধান করার সাথে সাথে অন্য কুকির নাম শেষ হয়। উদাহরণস্বরূপ, আপনি "এক" নামের কুকি খুঁজছেন এবং সেখানে "সম্পন্ন" নামে একটি কুকি রয়েছে।
  3. যখন কুকি নামটিতে এমন অক্ষর অন্তর্ভুক্ত থাকে যা ব্যাকস্ল্যাশ এর আগে না হয়ে নিয়মিত অভিব্যক্তিতে ব্যবহৃত হয় তখন সেগুলি নিজের মতো করে ব্যাখ্যা করা হয় না।

নিম্নলিখিত পদ্ধতিটি এই কেসগুলি পরিচালনা করে:

function getCookie(name) {
    function escape(s) { return s.replace(/([.*+?\^${}()|\[\]\/\\])/g, '\\$1'); };
    var match = document.cookie.match(RegExp('(?:^|;\\s*)' + escape(name) + '=([^;]*)'));
    return match ? match[1] : null;
}

এই ফিরে আসবে nullকুকি না পাওয়া গেলে এটি । কুকির মান খালি থাকলে এটি একটি খালি স্ট্রিং ফিরিয়ে দেবে।

মন্তব্য:

  1. এই ফাংশনটি ধরে নিয়েছে কুকির নামগুলি সংবেদনশীল
  2. document.cookie- এটি যখন কোনও অ্যাসাইনমেন্টের ডানদিকে প্রদর্শিত হয়, এটি কুকির একটি সেমিকোলন-বিচ্ছিন্ন তালিকাযুক্ত একটি স্ট্রিং উপস্থাপন করে, যা ঘুরিয়ে name=valueজোড়া হয়। প্রতিটি সেমিকোলনের পরে একটি একক স্থান রয়েছে বলে মনে হয়।
  3. String.prototype.match()- nullকোনও মিল পাওয়া না গেলে ফিরে আসে। কোনও ম্যাচ পাওয়া গেলে একটি অ্যারে ফেরত দেয় এবং সূচকের উপাদানটি [1]প্রথম ম্যাচের গ্রুপের মান হয়।

নিয়মিত এক্সপ্রেশন নোট:

  1. (?:xxxx) - একটি মেলে না এমন গ্রুপ গঠন করে।
  2. ^ - স্ট্রিংয়ের শুরুর সাথে মেলে।
  3. | - গ্রুপের জন্য বিকল্প নিদর্শন পৃথক করে।
  4. ;\\s* - একটি আধা-কোলনের সাথে শূন্য বা আরও বেশি সাদা বর্ণের অক্ষর অনুসরণ করে।
  5. = - একটি সমান চিহ্নের সাথে মেলে।
  6. (xxxx) - একটি মিলছে গ্রুপ গঠন।
  7. [^;]*- একটি আধা-কোলন ব্যতীত শূন্য বা আরও বেশি অক্ষরের সাথে মেলে। এর অর্থ এটি অর্ধ-কোলন বা স্ট্রিংয়ের শেষ পর্যন্ত অক্ষরগুলির সাথে মিলবে, তবে তা অন্তর্ভুক্ত নয়।

4
এই উত্তরটি সেরা এবং সংক্ষিপ্ততম ফাংশন যা মিথ্যা ম্যাচ ব্যতীত সকল ক্ষেত্রে কাজ করে। এটি কীভাবে কাজ করে তারও সর্বোত্তম ব্যাখ্যা রয়েছে। তবে, পালানোর ক্রিয়াকলাপটি ব্যাখ্যা করা হয়নি এবং আমি মনে করব যে লেখক কুকি তৈরি করলে তিনি জানতে পারতেন যে নামটি পালানোর দরকার আছে কি না। সুতরাং আমি বরং একটি সংক্ষিপ্ত ফাংশন দেখতে চাই:function getCookie(name) { var match = document.cookie.match(RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); return match ? match[1] : null; }
জেফ বেকার 21

যদি এটি জেনেরিক সরঞ্জাম হতে হয় তবে এটি নামটি এড়িয়ে চলতে হবে বা নামটি সরাসরি রেগেক্সে এম্বেড করা না পারলে একটি ত্রুটি নিক্ষেপ করা উচিত। যে লোকেরা তাদের আবেদনের সীমাবদ্ধতাগুলি জানে তারা পালানো বা প্রহরী সরিয়ে নিতে পারে।
জো ল্যাপ

31

4 বছর পরে, ES6 উপায় সহজ সংস্করণ।

function getCookie(name) {
  let cookie = {};
  document.cookie.split(';').forEach(function(el) {
    let [k,v] = el.split('=');
    cookie[k.trim()] = v;
  })
  return cookie[name];
}

এটিকে অবজেক্ট হিসাবে ব্যবহার করার জন্য আমি একটি আক্ষেপও তৈরি করেছি Cookie। যেমন, Cookie.set(name,value)এবংCookie.get(name)

এটি স্ক্যান করার পরিবর্তে সমস্ত কুকিজ পড়ে। এটি সংখ্যক কুকিগুলির জন্য ঠিক আছে।


23

জোনাথন এখানে যে ফাংশনটি দিয়েছিল তা আমি সংশোধন করেছি, নিয়মিত অভিব্যক্তি ব্যবহার করে আপনি এর নাম অনুসারে একটি কুকির মান পেতে পারেন:

function getCookie(name){
    var pattern = RegExp(name + "=.[^;]*")
    var matched = document.cookie.match(pattern)
    if(matched){
        var cookie = matched[0].split('=')
        return cookie[1]
    }
    return false
}

যদি এটি খালি স্ট্রিংটি দেয় তবে এর অর্থ হ'ল কুকির উপস্থিতি আছে তবে এর কোনও মূল্য নেই, যদি এটি মিথ্যা ফেরত দেয় তবে কুকির অস্তিত্ব থাকে না। আশা করি এটা কাজে লাগবে.


শুধু কৌতূহলী, আপনি কেন var3 লাইনে ব্যবহার করেননি ? matched = ...
ভিক্টোরিও বেরেরা

সে সম্পর্কে দুঃখিত, এটি লিখতে ভুলে গেছি।
মহিয়াদ্দিন আলাউদ্দিন

14

কোনও বাহ্যিক bক্যের প্রয়োজন ছাড়াই একটি নির্দিষ্ট নামের একটি কুকি পেতে এখানে একটি লাইনার রয়েছে:

var cookie = ("; "+document.cookie).split("; YOUR_COOKIE_NAME=").pop().split(";").shift();

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


10

আমি জানি এটি একটি পুরানো প্রশ্ন তবে আমিও এই সমস্যাটি ঘটিয়েছি। কেবল রেকর্ডের জন্য, মোজিলা ওয়েব পৃষ্ঠায় বিকাশকারীদের মধ্যে একটি সামান্য এপিআই রয়েছে

আপনি কেবল জেএস ব্যবহার করে যয় নামে কোনও কুকি পেতে পারেন। কোডটি আরও পরিষ্কার আইএমএইচও (দীর্ঘ লাইন বাদে, আমি নিশ্চিত যে আপনি সহজেই ঠিক করতে পারবেন)।

function getCookie(sKey) {
    if (!sKey) { return null; }
    return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
}

মন্তব্যে বর্ণিত হিসাবে সচেতন থাকুন যে এই পদ্ধতিটি ধরে নিয়েছে যে কী এবং মানটি এনকোডিউআরআইসি কম্পোনেন্ট () ব্যবহার করে এনকোড করা হয়েছিল। যদি কুকির কী এবং মানটি এনকোড না করা হত তবে ডিকোড এবং এনকোডিউআরআইকিউম্পোন্ট () সরিয়ে দিন।


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

@ জনস আমরা কেবল ডিকোডেরিউআরকিউম্পোনেন্টটি অপসারণ করতে পারলাম, ঠিক? (যদি আমরা এটি কুকি সেট করতে ব্যবহার না করি?) এটি কি এখনও কার্যকর হবে?
নিকক নিউম্যান

হ্যাঁ, সবেমাত্র ডিকোডিউরিটি সরানো হয়েছে এবং এই রেজিপ্সপটি একটি দানব। আপনাকে ধন্যবাদ মার্ক!
নিকক নিউম্যান

10

আপনি জাভাস্ক্রিপ্ট কুকিজ পেতে এবং সেট করতে জেএস-কুকি লাইব্রেরি ব্যবহার করতে পারেন ।

আপনার এইচটিএমএল অন্তর্ভুক্ত:

<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>

একটি কুকি তৈরি করতে:

Cookies.set('name', 'value');

একটি কুকি পড়তে:

Cookies.get('name'); // => 'value'

8

এখানে একটি সুন্দর সংক্ষিপ্ত সংস্করণ

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

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


2
এখন থেকে সেরা উত্তর। ES6 বৈশিষ্ট্য ব্যবহার করে। এটা তোলে 2017 এবং মানুষ এখনো ব্যবহার var, +CONCATENATE, ইত্যাদি -.- '
ইলিয়াস সোয়ারেস

@ ইলিয়াসসোয়ারেস ব্যবহার করার সমস্যা কি var?
mrRiiha


কোনও সমস্যা নয়, তবে লেট ব্যবহার করা একটি ভাল অনুশীলন কারণ এটির অনেক পরিস্থিতিতে সুবিধা রয়েছে এবং প্রায় কোনও অসুবিধা নেই
এলিয়াস সোয়ারস

7

ব্যবহার object.defineProperty

এটির সাহায্যে আপনি সহজেই কুকিজ অ্যাক্সেস করতে পারেন

Object.defineProperty(window, "Cookies", {
    get: function() {
        return document.cookie.split(';').reduce(function(cookies, cookie) {
            cookies[cookie.split("=")[0]] = unescape(cookie.split("=")[1]);
            return cookies
        }, {});
    }
});

এখন থেকে আপনি কেবল করতে পারেন:

alert( Cookies.obligations );

এটি স্বয়ংক্রিয়ভাবে আপডেট হবে, সুতরাং আপনি যদি কোনও কুকি Cookiesপরিবর্তন করেন তবে সেটিও পরিবর্তন হবে।


2
পারফেক্ট! ব্যতীত এটি অবজেক্টগুলির জন্য কাজ করবে না যার ড্যাশগুলির মতো কিছু অক্ষর রয়েছে (কুকির নাম হিসাবে), এবং যখন বিভাজন হয়, অবজেক্টগুলির প্রথমে ফাঁকা জায়গা থাকে তাই আমি যাই cookies[(cookie.split("=")[0]).replace(/ /g,'')] = ..। ধন্যবাদ !!
স্যামুয়েল এলহ

@ সামুয়েল এলহ সঠিক, তবে আপনি প্রতিস্থাপন (/ / g, '') এর পরিবর্তে .trim () ব্যবহার করতে পারেন
mtizziani

7

কিরলিচ একটি ভাল সমাধান দিয়েছেন। তবে, এটি ব্যর্থ হয় যখন একই নামের সাথে দুটি কুকি মান থাকে, এই পরিস্থিতির জন্য এখানে একটি সাধারণ সমাধান:

function getCookie(name) {
  var value = "; " + document.cookie;
  var parts = value.split("; " + name + "=");
  if (parts.length >= 2) return parts.pop().split(";").shift();
}

6

সর্বদা ভাল কাজ করে:

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

function setCookie(variable, value, expires_seconds) {
    var d = new Date();
    d = new Date(d.getTime() + 1000 * expires_seconds);
    document.cookie = variable + '=' + value + '; expires=' + d.toGMTString() + ';';
}

JQuery বা কোনও কিছুর জন্য কোনও প্রয়োজন নেই। খাঁটি পুরাতন ভাল জাভাস্ক্রিপ্ট।


6
function getCookie(name) {
    var pair = document.cookie.split('; ').find(x => x.startsWith(name+'='));
    if (pair)
       return pair.split('=')[1]
}

6

কুকির নাম সহ কুকি পেতে সহজ ফাংশন:

function getCookie(cn) {
    var name = cn+"=";
    var allCookie = decodeURIComponent(document.cookie).split(';');
    var cval = [];
    for(var i=0; i < allCookie.length; i++) {
        if (allCookie[i].trim().indexOf(name) == 0) {
            cval = allCookie[i].trim().split("=");
        }   
    }
    return (cval.length > 0) ? cval[1] : "";
}

6

দৃশ্যত এমডিএন শব্দের সীমানা রেইগেক্স চরিত্রের ক্লাসটি কখনও শুনেনি \b, যা এর সাথে দু'দিকে \w+আবদ্ধ মিলে মিলে যায় \W+:

getCookie = function(name) {
    var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
    return r ? r[1] : null;
};

var obligations = getCookie('obligations');

5

আমার কাছে মনে হচ্ছে আপনি কুকি কী-মান জোড়গুলিকে একটি অ্যারেতে বিভক্ত করতে পারেন এবং এটিতে আপনার অনুসন্ধানটি বেস করতে পারেন:

var obligations = getCookieData("obligations");

যা নিম্নলিখিতগুলি চালায়:

function getCookieData( name ) {
    var pairs = document.cookie.split("; "),
        count = pairs.length, parts; 
    while ( count-- ) {
        parts = pairs[count].split("=");
        if ( parts[0] === name )
            return parts[1];
    }
    return false;
}

বেহালার: http://jsfiddle.net/qFmPc/

অথবা সম্ভবত নিম্নলিখিতগুলিও:

function getCookieData( name ) {
    var patrn = new RegExp( "^" + name + "=(.*?);" ),
        patr2 = new RegExp( " " + name + "=(.*?);" );
    if ( match = (document.cookie.match(patrn) || document.cookie.match(patr2)) )
        return match[1];
    return false;
}

1
ডকুমেন্ট.কুকি.ইন্ডেক্সঅফ (নাম) ব্যবহার করার এবং তুলনা করার কোনও পদ্ধতি আছে?

@ আন্ড্রেজহ্যাফনার আপনি করতে পারবেন, যদিও এটি সাবস্ট্রিংয়ের সাথে মেলে। সুতরাং আপনার যদি একটি কুকির নাম "ফুবার" থাকে এবং যার নাম "বার" থাকে তবে আপনি "ফুবার" এর "বার" কী "বার" দিয়ে বিভ্রান্ত করতে পারেন।
সাম্পসন

@ আন্ড্রেজহ্যাফনার দয়া করে পরবর্তী পদ্ধতিটি দেখুন, যা দ্রুত হওয়া উচিত, যেহেতু এটি ম্যাচের জন্য স্ট্রিংটি পরীক্ষা করে।
সাম্পসন

1
দ্বিতীয় পদ্ধতিতে একটি বাগ রয়েছে এতে এটি সর্বশেষ কুকির মানটি খুঁজে পাবে না কারণ এটি সর্বদা একটি অনুসন্ধান করে; শেষে. একটি সংশোধন সংস্করণ হবে:function getCookieData( name ) { var patrn = new RegExp( "(?:^| )" + name + "=(.*?)(?:;|$)" ); if ( match = (document.cookie.match(patrn) )) return match[1]; return false; }
ওজ সলোমন

5

আমার প্রকল্পগুলিতে আমি নাম অনুসারে কুকিজ অ্যাক্সেস করতে নিম্নলিখিত ফাংশনটি ব্যবহার করি

function getCookie(cookie) {
    return document.cookie.split(';').reduce(function(prev, c) {
        var arr = c.split('=');
        return (arr[0].trim() === cookie) ? arr[1] : prev;
    }, undefined);
}

4

আপনার যদি কেবল কিছু কুকির উপস্থিতি আছে কিনা তা খতিয়ে দেখতে প্রয়োজন তবে সহজ এটি করুন:

document.cookie.split('logged=true').length == 2

যদি কুকি লগড = সত্য বিদ্যমান, আপনি 1 না পেয়ে 2 পাবেন।

লগড = সত্য - এটি আপনার কুকির নাম = মান বা কেবল একটি নাম পরিবর্তন করুন


1
.indexOf() >= 0পরিবর্তে এটি আরও পড়তে পারা যায় না?
ভিক সিডুবলিয়েউ

3

কুকি পাওয়ার জন্য এখানে ইতিমধ্যে সুন্দর উত্তর রয়েছে, তবে এটি আমার নিজস্ব সমাধান:

function getcookie(cookiename){
var cookiestring  = document.cookie;
var cookiearray = cookiestring.split(';');
for(var i =0 ; i < cookiearray.length ; ++i){ 
    if(cookiearray[i].trim().match('^'+cookiename+'=')){ 
        return cookiearray[i].replace(`${cookiename}=`,'').trim();
    }
} return null;
}

ব্যবহার: `

     getcookie('session_id');
   // gets cookie with name session_id

3

জাভাস্ক্রিপ্ট দ্বারা সেট

document.cookie = 'cookiename=tesing';

jquery- কুকি প্লাগইন সঙ্গে jquery দ্বারা পেতে

var value = $.cookie("cookiename");

alert(value);

@cytsunny - এটি আপনার ব্যবহার করার জন্য jquery কুকি প্লাগইন থাকতে হবে কারণ এটি।
অ্যালেক্স স্ট্যান্ডিফোর্ড

বাহ .... আগে কোন গুরুত্বপূর্ণ তথ্য অনুপস্থিত .... তবে আপনি যে লিঙ্কটি সরবরাহ করেছেন তা থেকে মনে হয় গ্রন্থাগারের মালিক সিদ্ধান্ত নিয়েছেন যে তারা আরও ভালভাবে জেকুরি নির্ভরতা অপসারণ করবেন।
সাইটসুনি


2

আমার সমাধানটি হ'ল:

function getCookieValue(cookieName) {
    var ca = document.cookie.split('; ');
    return _.find(ca, function (cookie) {
        return cookie.indexOf(cookieName) === 0;
    });
}

এই ফাংশনটি অ্যান্ডোরজোর __ফাইন্ড-ফাংশন ব্যবহার করে। যদি কুকির নামটি না থাকে তবে অপরিবর্তিত ফিরে আসে


2

আমি এটি এভাবেই করেছি। যাতে আমি মানগুলি পৃথক করতে অ্যাক্সেস পেতে একটি অবজেক্ট পাই this এটির সাহায্যে আপনি কুকিটিকে পিতামাতার কাছে দিতে পারেন এবং তারপরে আপনি কীগুলি দ্বারা আপনার মানগুলি অ্যাক্সেস করতে পারেন

var cookies=getCookieVal(mycookie);
alert(cookies.mykey);
function getCookieVal(parent) {
            var cookievalue = $.cookie(parent).split('&');
            var obj = {};
            $.each(cookievalue, function (i, v) {
                var key = v.substr(0, v.indexOf("="));
                var val = v.substr(v.indexOf("=") + 1, v.length);

                obj[key] = val;

            });
            return obj;
        }  

1

বিদ্যমান কুকিগুলি সন্ধান করার জন্য একটি কার্যকরী পন্থা। এটি একটি অ্যারে প্রদান করে, সুতরাং এটি একই নামের একাধিক ঘটনাকে সমর্থন করে। এটি আংশিক কী মেলানো সমর্থন করে না, তবে ফিল্টারে === একটি রেজেক্সের সাথে প্রতিস্থাপন করা তুচ্ছ।

function getCookie(needle) {
    return document.cookie.split(';').map(function(cookiestring) {
        cs = cookiestring.trim().split('=');

        if(cs.length === 2) {
            return {'name' : cs[0], 'value' : cs[1]};
        } else {
            return {'name' : '', 'value' : ''};
        }
    })
    .filter(function(cookieObject) { 
        return (cookieObject.name === needle);
    });
}

1

কেবলমাত্র নিম্নলিখিত ফাংশনটি ব্যবহার করুন (একটি খাঁটি জাভাস্ক্রিপ্ট কোড)

const getCookie = (name) => {
 const cookies = Object.assign({}, ...document.cookie.split('; ').map(cookie => {
    const name = cookie.split('=')[0];
    const value = cookie.split('=')[1];

    return {[name]: value};
  }));

  return cookies[name];
};

1

নাম অনুসারে কুকি পান নিচের ফাংশনে কুকির নামটি দিন

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

0

নিম্নলিখিত ফাংশনটি key-valueপ্রয়োজনীয় কুকির একজোড়া ফিরিয়ে দেবে , যেখানে keyকুকির নাম এবং কুকির valueমান হবে।

/**
 * Returns cookie key-value pair
 */
var getCookieByName = function(name) {
    var result = ['-1','-1'];
    if(name) {
        var cookieList = document.cookie.split(';');
        result = $.grep(cookieList,function(cookie) { 
            cookie = cookie.split('=')[0];
            return cookie == name;
        });
    }
    return result;
};

0

কুকিজ উদাহরণ: উদাহরণ জেএস:

document.cookies = {
   create : function(key, value, time){
     if (time) {
         var date = new Date();
         date.setTime(date.getTime()+(time*24*60*60*1000));
         var expires = "; expires="+date.toGMTString();
     }
     else var expires = "";
     document.cookie = key+"="+value+expires+"; path=/";
   },
   erase : function(key){
     this.create(key,"",-1);
   },
   read : function(key){
     var keyX = key + "=";
     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(keyX) == 0) return   c.substring(keyX.length,c.length);
     }
     return null;
   }
}

জসন বা এক্সএমএল সহ অ্যারে এবং অবজেক্টগুলি সঞ্চয় করুন

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