আমি কীভাবে কুকি থেকে একটি মান তৈরি এবং পড়তে পারি?


274

আমি কীভাবে জাভাস্ক্রিপ্টে কোনও কুকি থেকে একটি মান তৈরি করতে এবং পড়তে পারি?



এফডাব্লুআইডাব্লু, জেএস-কুকি এটি পরিচালনা করার জন্য একটি খুব ভাল এপিআই সরবরাহ করে।
ফাগনার ব্র্যাক

আপনি জাভাস্ক্রিপ্ট কুকি এই গাইড পরীক্ষা করতে পারেন ।
শুভ কুমার

ভুলে যাবেন না যে ওয়েব স্টোরেজ এপিআই , কিছু পরিস্থিতিতে কুকিগুলির জন্য একটি ভাল বিকল্প হতে পারে।
ম্যাটবিয়ানকো

উত্তর:


234

কুকি তৈরি এবং পুনরুদ্ধারের জন্য আপনি যে ফাংশনগুলি ব্যবহার করতে পারেন তা এখানে।

function createCookie(name, value, days) {
    var expires;
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toGMTString();
    }
    else {
        expires = "";
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}

function getCookie(c_name) {
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1) {
            c_start = c_start + c_name.length + 1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1) {
                c_end = document.cookie.length;
            }
            return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    return "";
}

23
আপনার কুকির মানটিতে এমন কোনও কিছু রয়েছে যা ভালভাবে এনকোড / ডিকোড করে না এমনটি কার্যকর হয় না। এক W3Schools এ কাজ beautifly বলে মনে হয়
রিচার্ড পরাজিত

13
মজিলা থেকে আসা এই সাধারণ মোড়কের স্পষ্টভাবে ইউনিকোড সমর্থন রয়েছে
ব্র্যাড পার্কস

4
@ ব্র্যাডপার্কস খুব খারাপ এটি জিপিএলে প্রকাশিত হয়েছে।
jahu

1
কুকির কোনও মান না থাকলে এটি IE8 বা 9 এ কাজ করবে না, কারণ আইপি কুকির নামের পরে সমান চিহ্ন ( = ) যোগ করে না । আমরা যা করি তা হ'ল সূচিপত্র ("=") == - 1 এবং যদি তাই হয় তবে পুরো কুকিকে কুকির নাম হিসাবে ব্যবহার করুন।
মোহোচ

@ যাহু এবং আমি বলব এটি জনসাধারণের
ডোমেইনেও রয়েছে

51

সংক্ষিপ্ত এবং সম্পূর্ণ বৈশিষ্ট্যযুক্ত ES6 পদ্ধতির:

const setCookie = (name, value, days = 7, path = '/') => {
  const expires = new Date(Date.now() + days * 864e5).toUTCString()
  document.cookie = name + '=' + encodeURIComponent(value) + '; expires=' + expires + '; path=' + path
}

const getCookie = (name) => {
  return document.cookie.split('; ').reduce((r, v) => {
    const parts = v.split('=')
    return parts[0] === name ? decodeURIComponent(parts[1]) : r
  }, '')
}

const deleteCookie = (name, path) => {
  setCookie(name, '', -1, path)
}

2
toGMTString()অবচয় করা হয়েছে, toUTCString()পরিবর্তে ব্যবহার করুন।
থানহ এনগুইন

নিবন্ধন করুন আপডেট হয়েছে
আর্টনিকপ্রো

1
কখনও কখনও কুকি মান নিজেই =চিহ্ন থাকতে পারে । getCookieসেক্ষেত্রে ফাংশনটি অপ্রত্যাশিত ফলাফল আনবে। এটি এড়াতে নীচের তীরের ক্রিয়াটি বডিটি ব্যবহারের বিষয়ে বিবেচনা করুনconst [n, ...val] = v.split('='); return n === name ? decodeURIComponent(val.join('=')) : r
দিমিত্রি ঝুরা

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

4
864e5 = 86400000 = 1000*60*60*2424 ঘন্টা দিনে মিলিসেকেন্ডের সংখ্যা উপস্থাপন করে।
হেনরিখ কান্টুনি

41

JQuery কুকিজ

বা সরল জাভাস্ক্রিপ্ট:

function setCookie(c_name,value,exdays)
{
   var exdate=new Date();
   exdate.setDate(exdate.getDate() + exdays);
   var c_value=escape(value) + ((exdays==null) ? "" : ("; expires="+exdate.toUTCString()));
   document.cookie=c_name + "=" + c_value;
}

function getCookie(c_name)
{
   var i,x,y,ARRcookies=document.cookie.split(";");
   for (i=0; i<ARRcookies.length; i++)
   {
      x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
      y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
      x=x.replace(/^\s+|\s+$/g,"");
      if (x==c_name)
      {
        return unescape(y);
      }
   }
}

1
আমি এটি প্রাথমিকভাবে চিহ্নিত করছি কারণ আপনি জিকুয়েরি কুকিজ উল্লেখ করেছেন। আমি এটি সুপারিশ করব। কোডটি খুব ছোট এবং আপনি যদি ইতিমধ্যে JQuery ব্যবহার করেন তবে এটি ব্যবহার করা ঠিক সঠিক জিনিস।
w0rp

17

মোজিলা সম্পূর্ণ ইউনিকোড সমর্থন সহ কুকিজ পড়ার এবং লেখার জন্য একটি সহজ কাঠামো সরবরাহ করে সহ এটি কীভাবে ব্যবহার করতে হয় তার উদাহরণ সহ করে।

একবার পৃষ্ঠায় অন্তর্ভুক্ত হয়ে গেলে আপনি একটি কুকি সেট করতে পারেন:

docCookies.setItem(name, value);

একটি কুকি পড়ুন:

docCookies.getItem(name);

বা একটি কুকি মুছুন:

docCookies.removeItem(name);

উদাহরণ স্বরূপ:

// sets a cookie called 'myCookie' with value 'Chocolate Chip'
docCookies.setItem('myCookie', 'Chocolate Chip');

// reads the value of a cookie called 'myCookie' and assigns to variable
var myCookie = docCookies.getItem('myCookie');

// removes the cookie called 'myCookie'
docCookies.removeItem('myCookie');

মজিলার ডকুমেন্ট.কুকি পৃষ্ঠায় আরও উদাহরণ এবং বিশদ দেখুন

এই সরল জেএস ফাইলের একটি সংস্করণ গিথুবে রয়েছে


2
দয়া করে নোট করুন যে এমডিএন-তে সরবরাহিত কুকি লাইব্রেরি এলজিপিএল নয়, জিপিএল এর অধীনে প্রকাশিত হয়েছে।
সমস্ত শ্রমিকরা

আমার কোন জাভাস্ক্রিপ্ট ফাইলটি আমদানি করতে হবে? এটি খুঁজে পাওয়া যায় নি :(
অলিকএলজিন-কিলাকা

এই পৃষ্ঠায় "লাইব্রেরি" এর অধীনে বিভাগটি দেখুন: বিকাশকারী.মোজিলা.আর.এন.ইউএস / ডকস / ওয়েব / এপিআই / ডকুমেন্ট / আপনি এটি কোনও ফাইলে সংরক্ষণ করতে পারেন এবং এটি অন্তর্ভুক্ত করতে পারেন বা এটি একটি বিদ্যমান জেএস ফাইলটিতে আটকান যেখানে আপনি এটি ব্যবহার করতে চান।
ব্রেন্ডন নী

তাহলে কোনও স্ট্যান্ডেলোন জাভাস্ক্রিপ্ট ফাইল নেই? সুতরাং এটি একটি কোড স্নিপেট - আসল পাঠাগার নয়।
অ্যালিকেলজিন-কিলাকা

দুর্দান্ত ইনপুট! "গ্রন্থাগার" হ'ল ~ 80 লাইন সহ একক .js ফাইল; এটি এই ফাইলটি ( গিটহাবটিতে
ফিলিপ

8

ES7, গেট () এর জন্য একটি রেগেক্স ব্যবহার করে। এমডিএন ভিত্তিক

const Cookie =
    { get: name => {
        let c = document.cookie.match(`(?:(?:^|.*; *)${name} *= *([^;]*).*$)|^.*$`)[1]
        if (c) return decodeURIComponent(c)
        }
    , set: (name, value, opts = {}) => { 
        if (opts.days) { 
            opts['max-age'] = opts.days * 60 * 60 * 24; 
            delete opts.days 
            }
        opts = Object.entries(opts).reduce((str, [k, v]) => `${str}; ${k}=${v}`, '')
        document.cookie = name + '=' + encodeURIComponent(value) + opts
        }
    , delete: (name, opts) => Cookie.set(name, '', {'max-age': -1, ...opts}) 
    // path & domain must match cookie being deleted 
    }

Cookie.set('user', 'Jim', {path: '/', days: 10}) 
// Set the path to top level (instead of page) and expiration to 10 days (instead of session)

ব্যবহার - কুকি.জেট (নাম, মান [, বিকল্পসমূহ]):
বিকল্পগুলি সমস্ত স্ট্যান্ডার্ড কুকি বিকল্পগুলিকে সমর্থন করে এবং "দিন" যুক্ত করে:

  • পাথ : '/' - যে কোনও নিখুঁত পাথ। ডিফল্ট : বর্তমান নথির অবস্থান,
  • ডোমেন : 'sub.example.com' - ডট দিয়ে শুরু নাও হতে পারে। ডিফল্ট : সাবডোমেন ছাড়াই বর্তমান হোস্ট।
  • সুরক্ষিত : সত্য - কেবল https- র মধ্যে কুকি পরিবেশন করুন। ডিফল্ট : মিথ্যা।
  • দিন : 2 - দিন কুকির মেয়াদ শেষ হওয়া পর্যন্ত। ডিফল্ট : অধিবেশন শেষ।
    মেয়াদোত্তীর্ণকরণের বিকল্প উপায়:
    • মেয়াদ শেষ হবে : 'রবি, 18 ফেব্রুয়ারী 2018 16:23:42 GMT' - GMT স্ট্রিং হিসাবে মেয়াদ শেষ হওয়ার তারিখ।
      বর্তমান তারিখটি পাওয়া যাবে: নতুন তারিখ (তারিখ.নো ()) টুআউটএসটিস্ট্রিং ()
    • 'সর্বাধিক বয়স' : 30 - দিনের মতো, তবে দিনের পরিবর্তে সেকেন্ডে।

অন্যান্য উত্তরগুলি পুরানো আই সংস্করণ সমর্থন করতে "সর্বাধিক বয়স" পরিবর্তে "মেয়াদ শেষ" ব্যবহার করে। এই পদ্ধতির জন্য ES7 প্রয়োজন, সুতরাং আই 7 যাইহোক বাহিরে রয়েছে (এটি কোনও বড় বিষয় নয়)।

দ্রষ্টব্য: "=" এবং "{:}" এর মতো মজাদার অক্ষরগুলি কুকি মান হিসাবে সমর্থিত হয় এবং রেজেক্স নেতৃস্থানীয় এবং অনুসরণকারী শ্বেতস্পেস পরিচালনা করে (অন্যান্য লিবস থেকে)।
আপনি যদি বস্তুগুলি সঞ্চয় করতে চান তবে হয় তাদের আগে এবং পরে এনএসড করুন এবং JSON.stringify এবং JSON.parse করুন, উপরেরটি সম্পাদনা করুন বা অন্য কোনও পদ্ধতি যুক্ত করুন। উদাহরণ:

Cookie.getJSON = name => JSON.parse(Cookie.get(name))
Cookie.setJSON = (name, value, opts) => Cookie.set(name, JSON.stringify(value), opts);

ডাউনটা ভোটাররা দয়া করে আমার পদ্ধতিতে কী ভুল তা ব্যাখ্যা করবেন?
সামগুডি

1
1. আরও ছোট, এবং বজায় রাখা IMO সহজ easier 2. আরও সম্পূর্ণ (নিরাপদ গ্রহণের একমাত্র উত্তর, কোনও আর্গুমেন্টের অর্ডার, সর্বাধিক বয়স)। ৩. আরও মানক ডিফল্ট (বেশিরভাগ উত্তরের মতো এখানে স্ট্যান্ডার্ডের দিকে পাথ ইত্যাদি ডিফল্ট)। ৪. সর্বোত্তম অনুশীলন (এমডিএন অনুসারে, রেজেক্স মানগুলি উত্তোলনের সবচেয়ে নির্ভরযোগ্য উপায়)। ৫. ফিউচারপ্রোক (কুকিগুলিতে আরও বিকল্প যুক্ত করা থাকলে সেগুলি বজায় রাখা হবে)। One. একটি বস্তু ফাংশনগুলির একগুচ্ছের তুলনায় কোডকে কম দূষণ করে। 7. পান, সেট করুন এবং মুছুন এবং আরও পদ্ধতি যুক্ত করা সহজ। ৮. ইএস y (মুখরোচক বুজওয়ার্ডস)।
স্যামগুডি

7

যাদের {foo: 'bar' like এর মতো জিনিসগুলি সংরক্ষণ করা দরকার তাদের জন্য আমি @ কেভিনবার্কের উত্তরের আমার সম্পাদিত সংস্করণটি ভাগ করে দিচ্ছি। আমি JSON.stringify এবং JSON.parse যোগ করেছি, এগুলি সবই।

cookie = {

    set: function (name, value, days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            var expires = "; expires=" + date.toGMTString();
        }
        else
            var expires = "";
        document.cookie = name + "=" + JSON.stringify(value) + expires + "; path=/";
    },

    get : function(name){
        var nameEQ = name + "=",
            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  JSON.parse(c.substring(nameEQ.length,c.length));
        }

        return null;
    }

}

সুতরাং, এখন আপনি এই জাতীয় জিনিসগুলি করতে পারেন:

cookie.set('cookie_key', {foo: 'bar'}, 30);

cookie.get('cookie_key'); // {foo: 'bar'}

cookie.set('cookie_key', 'baz', 30);

cookie.get('cookie_key'); // 'baz'

5

আমি ইতিমধ্যে অনেকবার এই থ্রেডের স্বীকৃত উত্তর ব্যবহার করেছি। এটি কোডের দুর্দান্ত অংশ: সহজ এবং ব্যবহারযোগ্য। তবে আমি সাধারণত বাবেল এবং ইএস 6 এবং মডিউলগুলি ব্যবহার করি , সুতরাং আপনি যদি আমার মতো হন তবে ES6 এর সাথে দ্রুত বিকাশের জন্য এখানে অনুলিপি করার কোড রয়েছে

গৃহীত উত্তর ES6 সহ মডিউল হিসাবে পুনরায় লিখিত:

export const createCookie = ({name, value, days}) => {
  let expires;
  if (days) {
    let date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    expires = '; expires=' + date.toGMTString();
  } else {
    expires = '';
  }
  document.cookie = name + '=' + value + expires + '; path=/';
};

export const getCookie = ({name}) => {
  if (document.cookie.length > 0) {
    let c_start = document.cookie.indexOf(name + '=');
    if (c_start !== -1) {
      c_start = c_start + name.length + 1;
      let c_end = document.cookie.indexOf(';', c_start);
      if (c_end === -1) {
        c_end = document.cookie.length;
      }
      return unescape(document.cookie.substring(c_start, c_end));
    }
  }
  return '';
};

এবং এর পরে আপনি কেবল এটিকে কোনও মডিউল হিসাবে আমদানি করতে পারেন (অবশ্যই পথ পৃথক হতে পারে):

import {createCookie, getCookie} from './../helpers/Cookie';

5

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

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

function setCookie(name, value, expirydays) {
 var d = new Date();
 d.setTime(d.getTime() + (expirydays*24*60*60*1000));
 var expires = "expires="+ d.toUTCString();
 document.cookie = name + "=" + value + "; " + expires;
}

function deleteCookie(name){
  setCookie(name,"",-1);
}

সূত্র: http://mycodingtricks.com/snippets/ javascript / javascript-cookies/


2

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

cookie = (function() {

/**
 * Sets a cookie value. seconds parameter is optional
 */
var set = function(name, value, seconds) {
    var expires = seconds ? '; expires=' + new Date(new Date().getTime() + seconds * 1000).toGMTString() : '';
    document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/';
};

var map = function() {
    var map = {};
    var kvs = document.cookie.split('; ');
    for (var i = 0; i < kvs.length; i++) {
        var kv = kvs[i].split('=');
        map[kv[0]] = decodeURIComponent(kv[1]);
    }
    return map;
};

var get = function(name) {
    return map()[name];
};

var remove = function(name) {
    set(name, '', -1);
};

return {
    set: set,
    get: get,
    remove: remove,
    map: map
};

})();

0

ES6 এ কুকিজ পড়ার সহজ উপায়।

function getCookies() {
    var cookies = {};
    for (let cookie of document.cookie.split('; ')) {
        let [name, value] = cookie.split("=");
        cookies[name] = decodeURIComponent(value);
    }
    console.dir(cookies);
}


0

আপনি আমার কুকি ইএস মডিউলটি ব্যবহার করতে পারেন পেতে / সেট করতে / সরানোর জন্য ।

ব্যবহার:

আপনার হেড ট্যাগে, নিম্নলিখিত কোডটি অন্তর্ভুক্ত করুন:

<script src="https://raw.githack.com/anhr/cookieNodeJS/master/build/cookie.js"></script>

অথবা

<script src="https://raw.githack.com/anhr/cookieNodeJS/master/build/cookie.min.js"></script>

ওয়েব পৃষ্ঠাগুলিতে স্টোর ব্যবহারকারীর তথ্যের জন্য এখন আপনি উইন্ডো.কুকি ব্যবহার করতে পারেন।

cookie.isEnabled ()

কুকি আপনার ওয়েব ব্রাউজারে সক্ষম করা আছে?

returns {boolean} true if cookie enabled.

উদাহরণ

if ( cookie.isEnabled() )
    console.log('cookie is enabled on your browser');
else
    console.error('cookie is disabled on your browser');

কুকি.সেট (নাম, মান)

একটি কুকি সেট করুন।

name: cookie name.
value: cookie value.

উদাহরণ

cookie.set('age', 25);

কুকি.জেট (নাম [, ডিফল্টভ্যালু]);

একটি কুকি পেতে।

name: cookie name.
defaultValue: cookie default value. Default is undefined.
returns cookie value or defaultValue if cookie was not found
উদাহরণ
var age = cookie.get('age', 25);

কুকি.রেমভ (নাম);

কুকি সরান।

name: cookie name.
উদাহরণ
cookie.remove( 'age' );

ব্যবহারের উদাহরণ


-1

রিডকুকির একটি উন্নত সংস্করণ:

function readCookie( name )
{
    var cookieParts = document.cookie.split( ';' )
    ,   i           = 0
    ,   part
    ,   part_data
    ,   value
    ;

    while( part = cookieParts[ i++ ] )
    {
        part_data = part.split( '=' );

        if ( part_data.shift().replace(/\s/, '' ) === name )
        {
            value = part_data.shift();
            break;
        }

    }
    return value;
}

আপনার কুকির মান খুঁজে পাওয়ার সাথে সাথে এটির বিরতি হওয়া উচিত এবং এর মানটি ফিরিয়ে দেওয়া উচিত। আমার মতে ডাবল বিভক্তির সাথে খুব মার্জিত।

যদি এটি সঠিকভাবে মেলে তা নিশ্চিত করার জন্য যদি-শর্তটিতে প্রতিস্থাপন করা হয় একটি সাদা স্পেস ট্রিম


-1
function setCookie(cname,cvalue,exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires=" + d.toGMTString();
    document.cookie = cname+"="+cvalue+"; "+expires;
}

function getCookie(cname) {
    var name = cname + "=";
    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);
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}

function checkCookie() {
    var user=getCookie("username");
    if (user != "") {
        alert("Welcome again " + user);
    } else {
       user = prompt("Please enter your name:","");
       if (user != "" && user != null) {
           setCookie("username", user, 30);
       }
    }
}

-1

আমি সাধারণ কুকি ইউটিলস লিখেছি, এটি কুকি তৈরির জন্য, কুকি পড়ার এবং কুকি মুছে ফেলার জন্য তিনটি ফাংশন রয়েছে।

var CookieUtils = {
    createCookie: function (name, value, expireTime) {
        expireTime = !!expireTime ? expireTime : (15 * 60 * 1000); // Default 15 min
        var date = new Date();
        date.setTime(date.getTime() + expireTime);
        var expires = "; expires=" + date.toGMTString();
        document.cookie = name + "=" + value + expires + "; path=/";
    },
    getCookie: function (name) {
        var value = "; " + document.cookie;
        var parts = value.split("; " + name + "=");
        if (parts.length == 2) {
            return parts.pop().split(";").shift();
        }
    },
    deleteCookie: function(name) {
        document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
    }
};

-1

এখানে ডাব্লু 3 স্কুলগুলির উদাহরণ রয়েছে ।

function setCookie(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 + ";path=/";
}

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

-1

একটি সাধারণ পড়া

var getCookie = function (name) {
    var valueStart = document.cookie.indexOf(name + "=") + name.length + 1;
    var valueEnd = document.cookie.indexOf(";", valueStart); 
    return document.cookie.slice(valueStart, valueEnd)
}

-2

একটি কুকি পড়ার একটি দালাল এবং সহজ উপায় এরকম কিছু হতে পারে:

let username, id; 
eval(document.cookie); 
console.log(username + ", " + id); // John Doe, 123

আপনার কুকিতে এমন কিছু রয়েছে: আপনি যদি জানেন তবে এটি ব্যবহার করা যেতে পারে username="John Doe"; id=123;। নোট করুন যে কুকিতে একটি স্ট্রিংয়ের উদ্ধৃতি প্রয়োজন। সম্ভবত প্রস্তাবিত উপায় নয়, তবে পরীক্ষার / শেখার জন্য কাজ করে।

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