সাবডোমেনগুলি জুড়ে লোকালস্টোরেজ ব্যবহার করুন


102

আমি ব্রাউজারগুলিতে স্থানীয় স্টোরেজ সহ কুকিজগুলি প্রতিস্থাপন করছি যা এটি সমর্থন করতে পারে ( আইআই ছাড়া যে কেউ)। সমস্যাটি সাইট ডটকম এবং wwwসাইট ডট কম তাদের নিজস্ব লোকাল স্টোরেজ অবজেক্টগুলিকে সঞ্চয় করে। আমি বিশ্বাস করি যে www কে একটি সাবডোমেন হিসাবে বিবেচনা করা হয় (আপনি যদি আমাকে জিজ্ঞাসা করেন তবে একটি নির্বোধ সিদ্ধান্ত)। যদি কোনও ব্যবহারকারী মূলত সাইট ডটকমে থাকে এবং www টাইপ করার সিদ্ধান্ত নেয় । সাইট ডট কম তার পরের দর্শনে , তার সমস্ত ব্যক্তিগত ডেটা অ্যাক্সেসযোগ্য হবে। আমি কীভাবে আমার সমস্ত "সাবডোমেনগুলি" মূল ডোমেনের মতো একই লোকালস্টোরাজ ভাগ করতে পারি?


4
ফায়ারফক্স এবং আইই 8 কোনও ব্যবহারকারী নির্দিষ্ট ডোমেনের অধীনে ধ্রুবক ডেটা সংরক্ষণ করে। এফএফ-এর উদাহরণস্বরূপ, আপনি গ্লোবাল স্টোরেজ ['সাইট ডটকম'] করতে পারেন এবং এটি www.site.com এবং সাইট ডট কমের পক্ষে উপযুক্ত হবে। ক্রোমের প্রয়োগে এটি কীভাবে করা যায় তা আমি এখনও খুঁজে পাইনি।
জোজো

9
একটি বা পরেরটি ব্যবহারের কথা বিবেচনা করুন - www এর সাথে দেখা সমস্ত ব্যবহারকারীকে পুনর্নির্দেশ করুন। সাবডোমেন সাব-ডোমেন-কম ডোমেনে বা অন্য পথে।
এলাদ নাভা

4
আমি নিবন্ধটি অনেক আগে তৈরি করেছি: ক্রস-ডোমেন
লোকালস্টোরেজ

উত্তর:


97

এইভাবে আমি এটি ডোমেন জুড়ে ব্যবহার করি ...

  • আপনার প্যারেন্ট ডোমেন থেকে একটি আইফ্রেম ব্যবহার করুন - পিতামাত্র ডটকম বলুন
  • তারপরে প্রতিটি চাইল্ড.কম ডোমেনে আপনার পিতামাতা ডটকমের আইফ্রেমে একটি পোস্টম্যাসেজ করুন
  • আপনাকে যা করতে হবে তা হ'ল প্যারেন্ট ডটকমের সাথে কথা বলার জন্য আপনার পোস্টমেসেজ বার্তাগুলি কীভাবে ব্যাখ্যা করা যায় তার একটি প্রোটোকল সেটআপ করা উচিত if

আমি আসা করি এটা সাহায্য করবে :)


4
এটি আসল উত্তর, চেক করা একটি নয়। আমি এটি নিজেই করেছি তবে পোস্টমেসেজ সহ একটি সুবিধাজনক কলব্যাক মোড়ক তৈরি করেছি।
জেসন সেব্রিং

4
এই পদ্ধতিটি ব্যাখ্যা করে কয়েকটি উদাহরণ কোড সহ এখানে একটি নিবন্ধ রয়েছে: jcubic.wordpress.com/2014/06/20/cross-domain-localstores
টড দাম

4
নোট যে এই শুধুমাত্র সম্ভব যখন তৃতীয় পক্ষের কুকিজ অক্ষম করতে হয়: stackoverflow.com/a/44097269/4311428
maxeh

6
অ্যাপল তৃতীয় পক্ষের ডেটা ব্লক করতে ডেস্কটপ এবং মোবাইল উভয়ই সাফারি 7++ এ ডিফল্ট আপডেট করেছে। বিকল্পটিকে এখন "ব্লক কুকিজ এবং অন্যান্য ওয়েবসাইট ডেটা" বলা হয় যা স্থানীয় স্টোরেজের মতো জিনিসগুলিকে বোঝায় যা এখন ডোমেন দ্বারা সম্পূর্ণ বিচ্ছিন্ন। এই পদ্ধতিটি
সাফারিটিতে

4
@Max @Aranganathan এটি এখনও কাজ করে মূল প্রশ্ন ক্ষেত্রে জন্য - site.com/ www.site.comযতদিন সাবডোমেন একই পিতা বা মাতা ডোমেনে হয়
Kostiantyn

43

যদি আপনি কেবল এই নির্দিষ্ট সমস্যার জন্য iframe এবং postMessage সমাধানটি ব্যবহার করেন তবে আমার মনে হয় কেবল সাবডোমেন-কম কুকিতে ডেটা সংরক্ষণ করা কম কাজ (কোড-ভিত্তিক এবং গণনা-ভিত্তিক উভয়) হতে পারে এবং যদি এটি ইতিমধ্যে না হয় তবে লোকাল স্টোরেজে লোড এ, এটি কুকি থেকে ধরুন

পেশাদাররা:

  • অতিরিক্ত iframe এবং postMessage সেট আপ প্রয়োজন হয় না।

কনস:

  • সমস্ত সাবডোমাইনগুলিতে ডেটা উপলভ্য করে দেবে (শুধু www নয়) তাই আপনি যদি সমস্ত সাবডমিনগুলিতে বিশ্বাস না করেন তবে এটি আপনার পক্ষে কার্যকর নাও হতে পারে।
  • প্রতিটি অনুরোধে সার্ভারে ডেটা প্রেরণ করবে। দুর্দান্ত নয়, তবে আপনার দৃশ্যের উপর নির্ভর করে, সম্ভবত এখনও iframe / postMessage সমাধানের চেয়ে কম কাজ করুন।
  • আপনি যদি এটি করছেন তবে কেবল কুকিগুলি সরাসরি ব্যবহার করবেন না কেন? আপনার প্রসঙ্গে নির্ভর করে।
  • 4K সর্বোচ্চ কুকি আকার, ডোমেনের জন্য সমস্ত কুকিজ জুড়ে (মন্তব্যগুলিতে এটি নির্দেশ করার জন্য ব্লেকে ধন্যবাদ)

যদিও আমি অন্যান্য মন্তব্যকারীদের সাথে একমত, যদিও মনে হয় এটি লোকালস্টোরেজের জন্য একটি উল্লেখযোগ্য বিকল্প হওয়া উচিত যাতে কাজের আশপাশের প্রয়োজন হয় না।


32
কন: 4 কে সর্বোচ্চ কুকির আকার
ব্লেক মিলার

18
এছাড়াও, যেহেতু আমি হার্ড পদ্ধতিটি শিখেছি, 4k সীমা একক ডোমেনের জন্য সমস্ত কুকির আকারের যোগফলের জন্য, প্রতিটি কুকির জন্য নয়।
ব্লেক মিলার

অন্যান্য কনস: - কুকিগুলি সম্ভবত অ্যাডব্লোকারদের দ্বারা অবরুদ্ধ করা হবে - কুকিগুলির উদ্দেশ্য সার্ভার এবং ক্লায়েন্টের মধ্যে ছোট ডেটা ভাগ করে নেওয়ার জন্য ব্যবহার করা হবে, যদি সার্ভারটি কুকিতে আপনার সঞ্চয় করা ডেটা ব্যবহার না করে তবে ফলস্বরূপ এটি একটি অপব্যবহার
এন্নো

33

ধারাবাহিকতা এবং এই জাতীয় সমস্যা এড়াতে উভয়ই সাইটের ডটকমকে www.site.com এ পুনঃনির্দেশ করার পরামর্শ দিচ্ছি।

এছাড়াও, পার্সিস্টজেএস এর মতো ক্রস ব্রাউজার সমাধান ব্যবহার করার বিষয়টি বিবেচনা করুন যা প্রতিটি ব্রাউজারের স্থানীয় সঞ্চয়স্থান ব্যবহার করতে পারে।


এ জাতীয় পুনর্নির্দেশ করার জন্য সার্ভারগুলিতে আমার প্রশাসক অ্যাক্সেস নেই। সেই লাইব্রেরিটি কি আমাকে www এবং নন-www এর মধ্যে অবিরাম ডেটা ভাগ করার অনুমতি দেয়? কিছু পঠন করার পরে, দেখে মনে হচ্ছে প্রায় সমস্ত ব্রাউজারের স্টোরেজ প্রক্রিয়া এটির অনুমতি দেয় না। এটি কুকিজ বা স্থানীয় স্টোরেজ যাই হোক না কেন, আমরা এই সমস্যার মধ্যে চলে যাব ...
জোজো

হ্যাঁ, স্টোরেজ সাধারণত সাবডোমেন সহ ডোমেনের উপর নির্ভরশীল। এই কারণেই আমি পুনর্নির্দেশের পরামর্শ দিয়েছি। আপনার অগত্যা অ্যাডমিন অ্যাক্সেসের দরকার নেই, কেবলমাত্র ডকুমেন্টের
মূলটিতে

4
@ জোজো পুনঃনির্দেশের বিভিন্ন উপায় রয়েছে, যেমন শিরোনাম পাঠানো Locationবা <meta>এইচটিএমএল ট্যাগের মাধ্যমে, বা এমনকি জেএসের মাধ্যমে window.location
সনি সান্টোস

4
এটি কেবল উত্তর এড়ানো হচ্ছে। মায়াঙ্কের উত্তরটি সঠিক হিসাবে দেখুন।
জেসন সেব্রিং

4
+1 @ অডিওডিং, প্লাস এটি অন্যান্য ক্ষেত্রে অপ্রাসঙ্গিক - যেমনটি আমি এখানে থাকছি lang1.domain.com - lang2.domain.com
r --------- কে

11

মূল ডোমেনে কুকিতে সেট করুন -

document.cookie = "key=value;domain=.mydomain.com"

এবং তারপরে যেকোন প্রধান ডোমেন বা সাব ডোমেন থেকে ডেটা নেবেন এবং লোকালস্টোরারেজে সেট করুন


4

আমি xdLocalStorage ব্যবহার করছি, এটি একটি লাইটওয়েট জেএস লাইব্রেরি যা লোকালস্টোরেজ ইন্টারফেস প্রয়োগ করে এবং iframe পোস্ট বার্তা যোগাযোগ ব্যবহার করে ক্রস ডোমেন স্টোরেজ সমর্থন করে। (কৌণিক জেএস সমর্থন)

https://github.com/ofirdagan/cross-domain-local-stores


4
আমি এটি তাকিয়েছিলাম, তবে দেখে মনে হচ্ছে এটি সাফারিটিতে কাজ করে না। github.com/ofirdagan/cross-domain-local-stores/issues/10
অ্যান্ডিস জালাইটিস

2

এই হল কিভাবে:

[ নভেম্বর 2020 আপডেট: এই সমাধানটি সেট করতে সক্ষম হওয়ার উপর নির্ভর করে document.domain। দুর্ভাগ্যক্রমে এটি করার ক্ষমতা এখন অবমূল্যায়ন করা হয়েছে। ]

প্রদত্ত সুপারডোমেনের (যেমন উদাহরণ.কম) সাবডোমেনগুলির মধ্যে ভাগ করার জন্য, এমন একটি প্রযুক্তি আছে যা আপনি সেই পরিস্থিতিতে ব্যবহার করতে পারেন। এটা তোলে প্রয়োগ করা যেতে পারে localStorage, IndexedDB, SharedWorker, BroadcastChannel, ইত্যাদি, যার মধ্যে সব একই বংশোদ্ভূত পৃষ্ঠাগুলির মধ্যে ভাগ কার্যকারিতা প্রস্তাব, কিন্তু কোনো কারণে কোনো পরিবর্তন সম্মান না document.domainযে তাদের সরাসরি তাদের উৎপত্তি যেমন superdomain ব্যবহার করার অনুমতি দেবে।

(1) ডেটা সম্পর্কিত হতে একটি "প্রধান" ডোমেন চয়ন করুন: যেমন https://example.com বা https://www.example.com আপনার লোকালস্টোরেজ ডেটা ধারণ করবে। ধরা যাক আপনি https://example.com চয়ন করেছেন

(২) সেই চয়ন করা ডোমেনের পৃষ্ঠাগুলির জন্য স্থানীয়ভাবে স্টোরেজ ব্যবহার করুন।

(3) সমস্ত https://www.example.com পৃষ্ঠাগুলিতে ( অন্যান্য ডোমেন), সেট করতে জাভাস্ক্রিপ্ট ব্যবহার করুন document.domain = "example.com";। তারপর আরো একটি গোপন তৈরি <iframe>, এবং এটি নেভিগেট কিছু মনোনীত পৃষ্ঠার https://example.com ডোমেইন ( এটা কোন ব্যাপার না কি পৃষ্ঠা , যতদিন আপনি সেখানে জাভাস্ক্রিপ্ট একটি খুব সামান্য স্নিপেট ঢোকাতে পারবেন। আপনি যদি ' সাইট তৈরি পুনরায় শুধু এই কাজের জন্য বিশেষভাবে একটি খালি পৃষ্ঠাটি তৈরি করুন। যদি আপনি একটি এক্সটেনশন বা একটি গ্রিজমাঙ্কি ধাঁচের userscript লেখার তাহলে ইত্যাদি পৃষ্ঠাগুলি উপর কোন নিয়ন্ত্রণ নেই example.comসার্ভার, আপনি সর্বাধিক লাইটওয়েট পৃষ্ঠা চয়ন করুন এবং এটিতে আপনার স্ক্রিপ্ট সন্নিবেশ করান। কিছু ধরণের "পাওয়া যায়নি" পৃষ্ঠাটি সম্ভবত ভাল থাকবে)।

(৪) লুকানো iframe পৃষ্ঠায় স্ক্রিপ্টের জন্য কেবলমাত্র (ক) সেট প্রয়োজন document.domain = "example.com";, এবং (খ) এটি করা হয়ে গেলে প্যারেন্ট উইন্ডোকে অবহিত করা উচিত। এর পরে, প্যারেন্ট উইন্ডোটি কোনও বাধা ছাড়াই আইফ্রেমে উইন্ডো এবং তার সমস্ত বিষয়গুলি অ্যাক্সেস করতে পারে! তাই ন্যূনতম iframe পৃষ্ঠাটি হ'ল কিছু:

<!doctype html>
<html>
<head>
  <script>
    document.domain = "example.com";
    window.parent.iframeReady();  // function defined & called on parent window
  </script>
</head>
<body></body>
</html>

যদি কোনও ইউজার স্ক্রিপ্ট লেখা থাকে তবে iframeReady()আপনি আপনার মতো বহিরাগত-অ্যাক্সেসযোগ্য ফাংশনগুলি যুক্ত করতে নাও চান unsafeWindow, সুতরাং এর পরিবর্তে মূল উইন্ডোটির ইউজার স্ক্রিপ্টকে জানানোর একটি ভাল উপায় হতে পারে একটি কাস্টম ইভেন্ট ব্যবহার করা:

    window.parent.dispatchEvent(new CustomEvent("iframeReady"));

যা আপনি আপনার প্রধান পৃষ্ঠার উইন্ডোতে কাস্টম "iframeReady" ইভেন্টের জন্য শ্রোতা যুক্ত করে সনাক্ত করতে পারবেন।

(দ্রষ্টব্য: আইফ্রেমের ডোমেন ইতিমধ্যে উদাহরণ ডটকম থাকলেও আপনাকে ডকুমেন্ট.ডোমেন = "উদাহরণ.com" সেট করা দরকার: ডকুমেন্ট.ডমিনকে একটি মান নির্ধারণ করে স্পষ্টতই মূলটির পোর্টটি বাতিল করে দেয় এবং উভয় পোর্ট অবশ্যই আইফ্রেমের সাথে মেলে এবং এর পিতামাতাকে একই উত্স হিসাবে বিবেচনা করা হবে the এখানে নোটটি দেখুন: https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy#Changing_origin )

(5) একবার লুকানো আইফ্রেম তার পিতা বা মাতা উইন্ডোর এটি প্রস্তুত জানিয়েছে, পিতা বা মাতা উইন্ডোতে স্ক্রিপ্ট শুধু ব্যবহার করতে পারেন iframe.contentWindow.localStorage, iframe.contentWindow.indexedDB, iframe.contentWindow.BroadcastChannel, iframe.contentWindow.SharedWorkerপরিবর্তে window.localStorage, window.indexedDBইত্যাদি ... আর এই সব বস্তু scoped হবে মনোনীত HTTPS: // উদাহরণ.কমের উত্স - সুতরাং আপনার সমস্ত পৃষ্ঠার জন্য তাদের একই ভাগ করা উত্স থাকবে!

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

স্পষ্টতই, আপনারও নিশ্চিত হওয়া উচিত যে আপনার পৃষ্ঠার জীবদ্দশায় লুকিয়ে থাকা আইফ্রেমটি সরিয়ে নেওয়া বা নেভিগেট করা হয়নি ... OTOH এর পরিণাম কী হবে তা আমি জানি না, তবে খুব সম্ভবত খারাপ জিনিসগুলি ঘটবে।

এবং, একটি সতর্কতামূলক: হেডার ব্যবহার করে সেটিংস / পরিবর্তনটি ব্লক করা document.domainযেতে পারে , সেক্ষেত্রে বর্ণিত হিসাবে এই কৌশলটি ব্যবহারযোগ্য হবে না।Feature-Policy


যাইহোক, এই কৌশলটির একটি উল্লেখযোগ্যভাবে আরও জটিল জেনারালাইজেশন রয়েছে, যা এটিকে অবরুদ্ধ করা যায় না Feature-Policyএবং এটি সম্পূর্ণরূপে সম্পর্কিত নয় এমন ডোমেনগুলি ডেটা, যোগাযোগ এবং ভাগ করা কর্মীদের ভাগ করার অনুমতি দেয় (অর্থাত্ একটি সাধারণ সুপারডোমেন বন্ধ করে কেবল সাবডোমেন নয়)। @ মায়াঙ্ক জৈন ইতিমধ্যে তাদের উত্তরে এটি বর্ণনা করেছেন, যথা:

সাধারণ ধারণাটি হ'ল উপরের মতোই, আপনি অ্যাক্সেসের সঠিক উত্স প্রদান করতে একটি লুকানো ইফ্রেমে তৈরি করেছেন; কিন্তু এর পরিবর্তে তারপর আইফ্রেম উইন্ডোর বৈশিষ্ট্য সরাসরি দখলের, আপনি স্ক্রিপ্ট আইফ্রেম ভিতরে কাজ এগুলির সবকটি করতে ব্যবহার করুন, এবং আপনি আইফ্রেম এবং আপনার প্রধান উইন্ডোতে শুধুমাত্র ব্যবহার মধ্যে যোগাযোগ postMessage()এবং addEventListener("message",...)

এটি কাজ করে কারণ postMessage()বিভিন্ন উত্সের উইন্ডোর মধ্যেও ব্যবহার করা যেতে পারে। তবে এটি আরও উল্লেখযোগ্যভাবে জটিল কারণ আপনার মূল উইন্ডোর কোডটিতে সরাসরি লোকালস্টোরেজ, ইনডেক্সডডিবি, ইত্যাদি এপিআই ব্যবহার না করে আপনাকে কিছুটা মেসেজিং অবকাঠামো যা আপনি iframe এবং মূল উইন্ডোর মধ্যে তৈরি করেছেন তা দিয়ে যেতে হবে।


1

এই ধরণের সমাধান এর ফলে অনেক সমস্যার কারণ হয়। ধারাবাহিকতা এবং এসইও বিবেচনার জন্য প্রধান ডোমেনে পুনঃনির্দেশ করা সেরা সমাধান।

এটি সার্ভার স্তরে পুনর্নির্দেশ করুন

Nginx- এর সাথে www- কে নন-www তে পুনঃনির্দেশ কিভাবে করবেন

https://www.digitalocean.com/commune/tutorials/how-to-redirect-www-to-non-www-with-nginx-on-centos-7

বা অন্য কোনও স্তরের মতো রুট 53 যদি ব্যবহার করা হয়


0

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

রুট ডিরেক্টরিতে নিম্নলিখিতটি আপনার .htacess এ যুক্ত করুন ( আপনার যদি ইতিমধ্যে এটি না থাকে তবে একটি তৈরি করুন)

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

6
আমি এটিকে কমানোর জন্য খুব প্রলোভন করছি তবে আমি এটি করব না কারণ এটি ওপির ব্যবহারের ক্ষেত্রে সহায়তা করতে পারে, তবে যারা মাইএপ.কম এবং বিকাশকারীদের.মায়াপ্পটকম এবং সাপোর্ট.মায়াপ.কম.কম জুড়ে সেশন রাখতে চান, তাদের উত্তর এই ভাল না.
ডন ওমোন্ডি

আরে @ দনমোন্ডি আমি আপনাকে প্রশংসা করব যে আপনি যদি পরামর্শ দিচ্ছেন তার জন্য লিঙ্কগুলি আমাকে সহায়তা করতে পারেন!
আইয়ুশ বেহেতি

4
ওপিকে "সাবডোমেনগুলি জুড়ে লোকালস্টোরেজ ব্যবহার করুন" জিজ্ঞাসা করা হয়েছিল আপনার উত্তরটি "নন-ডাব্লু-তে www- কে পুনঃনির্দেশ করুন" তবে এটি কার্যকর হতে পারে এবং কেবলমাত্র সাধারণ সাবডোমেনটি যদি "www.abc.com" হয় তবে কেবলমাত্র কিছু অন্যান্য উত্তর এখানে দেওয়া যেতে পারে it আরও ব্যবহারিক।
ডন ওমোন্ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.