ক্লায়েন্ট-সাইড বা সার্ভার-সাইড প্রক্রিয়াজাতকরণের উপর জোর দেওয়ার মধ্যে পেশাদার / বিযুক্তি


20

কেন আমি প্রচুর প্রক্রিয়াজাত সার্ভার-সাইড সহ একটি ওয়েব অ্যাপ লিখতে চাই?

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

আমি এটিকে সার্ভার-সাইড লেখার পাশাপাশি ক্লায়েন্ট-সাইডকে কেবল একটি দর্শন হিসাবে বিবেচনা করার পাশাপাশি ওয়েব-অ্যাপ্লিকেশন লিখতে খুব কম দেখি । আমি কেন কখনই এটি করতে চাইব? কেবলমাত্র আমি দেখতে পাচ্ছি যে আমি যে কোনও ভাষায় ( http://www.paulgraham.com/avg.html ) চাই লিখতে পারি ml


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

চিন্তা করার একটি বিষয় হ'ল ডিবাগিং, যা আমার মতে সার্ভারে সাধারণত বেশি আরামদায়ক হয়। একই লগিং জন্য যায়।
ট্রাবেনফুচস

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

উত্তর:


28

দুটি বড় সমস্যা আছে।

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

  2. দ্বিতীয়টি আরও স্থাপত্য - আপনি বাইরের বিশ্বে কোন স্তরগুলি প্রকাশ করতে চান? বেশিরভাগ একমত হবেন যে আপনার ডেটা স্তরটি প্রকাশ করা অবিশ্বাস্যরকম ঝুঁকিপূর্ণ। আপনার পরিষেবা স্তর সম্পর্কে কি? আপনি কি সত্যিই সেই যুক্তিটি সেখানে পৌঁছে দিতে চান? যদি আপনি তা করেন, আপনি কি আপনার ডেটা স্তরের এন্ট্রি পয়েন্টগুলি প্রকাশ করছেন? আপনি যদি সার্ভিস লেয়ার সার্ভারটি পাশে রাখেন তবে কী বাকি? ইউআই, তাই না? সার্ভারে যে কতটা বেঁচে আছে এবং ক্লায়েন্টের উপর কতটুকু বিবেচনার জন্য কারণ 1 দেখুন।


1
স্তরগুলি আড়াল করার জন্য +1। এসকিউএল ইঞ্জেকশনটি মনে আসে ...
jmq

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

16

প্রথম এবং সর্বাগ্রে সুরক্ষা । আপনার সমস্ত যুক্তি ক্লায়েন্টের দিকে ঠেলে দিন এবং এটি হ্যাকার এবং শোষণের জন্য ন্যায্য খেলা।

কোনও অনুভূত মান সহ যে কোনও কিছুই 5 মিনিট স্থায়ী হইবে না, বিশেষত আর্থিক মান, এবং গেমড বা হ্যাক বা শোষিত হইবে এবং আপনার সিস্টেমকে বেশ খারাপভাবে ভেঙে ফেলবে। এমনকি যদি এটির আর্থিক মূল্য খুব কম না থাকে তবে এক শ্রেণির লোক রয়েছে যা বিরক্ত হওয়ায় এটি কেবল আপনার সিস্টেমটি ভেঙে ফেলার জন্য এটিকে হ্যাক করবে।


1
"উদাস" সম্ভবত একটি অত্যুন্নয়াকরণ। অনেক হ্যাকার কেবল বিন্দু তৈরি করতে বা বিকাশকারীকে বোকা বানানোর জন্য হ্যাক করে। এক ধরণের "আপনার কোডটি খারাপ, এবং আপনার খারাপ লাগা উচিত" -সমর্থন। "বিরক্তির বাইরে" হ্যাকগুলি কখনই ঘটে না তা বলে না, তবে আমি মনে করি এটি অত্যন্ত সাধারণ নয়।
মর মাউস

@ জারোদ - আপনি কীভাবে ক্লায়েন্টের পক্ষে যুক্তি প্রয়োগ করা আপনার সুরক্ষা বিন্দু থেকে খারাপ তা ব্যাখ্যা করতে পারেন?
সরল-সমাধান

@ সরল-সমাধান যদি আপনার এই প্রশ্নটি জিজ্ঞাসা করতে হয় ...

7

ক্লায়েন্ট সাইড ভার্সেস সার্ভার সাইড

ক্লায়েন্ট সাইড প্রসেসিং পৃষ্ঠা ভিত্তিক পদ্ধতির এবং এসওএপির বিপরীতে আরও জনপ্রিয় আরএসইএস স্ট্যান্ডার্ডের পাশাপাশি এমভিসির সাথে সঙ্গতিপূর্ণ। এই ট্রেন্ডগুলির উত্থান এবং এজেএক্স এবং এইচটিএমএল-আরআইএতে ফোকাস, ক্লায়েন্টের সাইড স্ক্রিপ্টিং ক্রমবর্ধমান এবং আরও জনপ্রিয়; তবে, সুরক্ষা উদ্বেগ এবং ক্লায়েন্টের সামর্থ্যের কারণে ক্লায়েন্ট-সাইড স্ক্রিপ্টিংটির একটি বিশেষ কুলুঙ্গি রয়েছে এবং সবকিছুর জন্য ব্যবহার করা উচিত নয়।

বিবেচ্য বিষয়:

মুঠোফোন

যদি আপনার টার্গেট শ্রোতার একটি বড় অংশটি মোবাইল ব্যবহারকারী হয়ে থাকে, ভারী প্রক্রিয়াকরণটি সার্ভারে ছেড়ে দেওয়া উচিত।

ক্রস ব্রাউজারের ধারাবাহিকতা

ওয়েব স্ট্যান্ডার্ডগুলি অনেক দূর এগিয়ে গেছে এবং এটি এতটা উদ্বেগের বিষয় নাও হতে পারে তবে প্রতিটি ওয়েব বিকাশকারী জানেন যে আইই 6,7 এবং 8 এবং কখনও কখনও সাফারি ক্লায়েন্টের পক্ষে মজার কাজ করতে পারে - নির্দিষ্ট ফাংশনগুলির কারণে চলতে পারে না সুরক্ষা বিধিনিষেধ এবং অন্যান্য বাস্তবায়িত মান না থাকার কারণে। এটিও লক্ষ করা গুরুত্বপূর্ণ যে শেষ ব্যবহারকারী কোনও ব্রাউজারকে নির্দিষ্ট বিধিনিষেধ আরোপ করতে বা এমনকি ক্লায়েন্ট-সাইড প্রসেসিং পুরোপুরি বন্ধ করতে (জাভাস্ক্রিপ্ট!) বন্ধ করতে পারে। যদি 100% ব্যবহারকারীর জন্য ধারাবাহিকতা প্রয়োজন হয় (এবং বিশেষত যদি আপনি অপ্রচলিত কিছু করছেন) তবে সার্ভার সাইডটি সবচেয়ে গুরুত্বপূর্ণ।

নিরাপত্তা

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

UI 'তে / ইউএক্স

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


6

প্রাথমিকভাবে এটি চেষ্টাটির সদৃশ হবে। সম্ভবত ক্লায়েন্টের কোনও ডেটা আবার সার্ভার স্তরে পরীক্ষা করা এবং প্রক্রিয়া করা হবে।

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

তবে, আমি আরও ভাল যুক্তি অভিজ্ঞতার জন্য ক্লায়েন্ট স্তরে করা যেতে পারে le

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

এখানে একটি সূক্ষ্ম লাইন আছে। সাধারণ বৈধতা যুক্তি ঠিক আছে, মূল ব্যবসায়ের যুক্তি ঠিক নেই।


4
  1. প্রথমে আপনাকে ওয়েব অ্যাপ্লিকেশনগুলির আর্কিটেকচারটি বোঝার দরকার, যদি না হয় তবে তিনটি স্তর রয়েছে:

    ক) ক্লায়েন্ট / উপস্থাপনা - এইচটিএমএল এবং জাভাস্ক্রিপ্টে অ্যাক্টিভএক্স / ফ্ল্যাশ / জাভা অ্যাপলেটস / সিলভারলাইট থাকতে পারে। আমি একটি অঙ্গ নিয়ে বাইরে চলে যাব এবং একটি ব্যাকএন্ড সার্ভারের সাথে যোগাযোগকারী নেটিভ মোবাইল অ্যাপ্লিকেশনগুলি যুক্ত করব। মূলত এই স্তরের ভূমিকা হ'ল এটির সাথে ইন্টারঅ্যাক্ট করার জন্য সিস্টেমের ব্যবহারকারীর জন্য একটি ইন্টারফেস সরবরাহ করা।

    খ) বিজনেস লজিক - পিএইচপি / আরআর / জাভা যেখানে ক্লায়েন্টের কাছ থেকে ডেটা সংগ্রহ করা হয়, প্রক্রিয়াজাত করা হয় এবং সংরক্ষণ করা হয় এবং যেখানে ক্লায়েন্টের ডেটাগুলির জন্য অনুরোধগুলি প্রক্রিয়া করে ক্লায়েন্টকে ফেরত পাঠানো হয়

    গ) ব্যাকএন্ড ডেটা স্টোর - সিস্টেমের তথ্যের জন্য অবিরাম স্টোরেজ সরবরাহ করে

  2. সুতরাং আপনি সমস্ত স্তরগুলিতে বৈধতা কোথায় করবেন। কেন?

    ক) ক্লায়েন্ট পক্ষ - নিশ্চিত করুন যে ব্যবহারকারী সঠিক তথ্য, প্রয়োজনীয় ক্ষেত্র ইত্যাদি প্রবেশ করেছে ensure

    খ) ব্যবসায়ের যুক্তি - ক্লায়েন্টের ডেটা ফিল্টার, স্যানিটাইজ এবং বৈধকরণ। সঞ্চয়স্থানের জন্য ডেটা সুষ্ঠুভাবে তৈরি হয়েছে তা নিশ্চিত করতে আরও জটিল ব্যবসার নিয়ম চালান। সামনের প্রান্তে সম্পন্ন কিছু বৈধতা এখানে পুনরাবৃত্তি হয়েছে, বিভিন্ন ক্লায়েন্ট থাকতে পারে এই কারণে, জাভাস্ক্রিপ্ট অক্ষম করা যেতে পারে ব্রাউজারগুলির উদাহরণস্বরূপ নিন। এটি উদাহরণস্বরূপ, এপিআইয়ের মাধ্যমে বিভিন্ন উত্স থেকে ডেটা গ্রহণ করতে পারে, সুতরাং এগুলি সমস্তটি বৈধ করা দরকার।

    গ) ব্যাকএন্ড ডেটা স্টোর - সীমাবদ্ধতাগুলি নিশ্চিত করে যে ডেটা সঞ্চয়স্থান এবং পরে পুনরুদ্ধারের জন্য ভালভাবে গঠিত।

সুতরাং আপনি কোথায় আপনার বৈধতা প্রয়াসকে কেন্দ্রীভূত করবেন, প্রতিটি স্তরকে যথাযথরূপে কার্যকর করার জন্য এটি ব্যবহার করুন এবং যে স্তরটি এটি পরিচালনা করতে পারে তার জন্য আরও জটিল নিয়ম রেখে যান


3

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


1

আপনি যখন ক্লায়েন্টের পক্ষ থেকে সম্পূর্ণ নিজের আচরণ তৈরি করেন (জাভাস্ক্রিপ্ট সহ বলুন), এসইও সমস্যা হয়ে উঠতে পারে।

সার্ভারের দিক থেকে প্রচুর পরিমাণে রক্ষিত ওয়েবসাইটগুলি সন্ধান ইঞ্জিনগুলিতে দৃশ্যমান এমন কোনও উপায়ে নির্দিষ্ট URL (সাধারণত RESTful) এ নির্দিষ্ট বিষয়বস্তু পোস্ট করতে আরও সহজেই সক্ষম হয় easily

এর অর্থ এটিও একটি দর্শক কোনও নির্দিষ্ট পৃষ্ঠা বুকমার্ক করতে পারে। আপনি কি ফেসবুকে চেষ্টা করেছেন?

এই স্টাফটি সমাধান করা যেতে পারে তবে এটি সাধারণত অ্যাপ্লিকেশনগুলিতে তৈরি হয় যা সার্ভারে অনেক কিছুই করে থাকে (র‌্যালস, ওয়ার্ডপ্রেস ইত্যাদি), আপনি যদি রিএ্যাকএটি বলার জন্য বিল্ডিং করেন তবে আপনাকে হুপের মধ্য দিয়ে ঝাঁপিয়ে পড়তে হবে।


0

কারণ স্থায়িত্ব

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

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

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

আমার সমাধান? আমি সার্ভারের পার্শ্বে যথাসম্ভব প্রসেসিং সম্পাদন করি এবং ক্লায়েন্টের পক্ষটি কেবলমাত্র একটি হালকা ওজনের র্যাপ যা সার্ভারে ডেটা প্রেরণ করে এবং সার্ভার থেকে জেএসএন এবং এইচটিএমএল টুকরা আকারে ডেটা গ্রহণ করে। এক্সএমএল এড়িয়ে চলুন; পরিবর্তে JSON ব্যবহার করুন।

আমি ক্লায়েন্ট-সাইড টেম্প্লেটিং করি না; আমি সার্ভারে থাকা সামগ্রীটি এইচটিএমএল খণ্ডকে রেন্ডার করি যা আমি .innerHTMLক্লায়েন্টের পাশের বিভিন্ন স্থানধারক উপাদানের বৈশিষ্ট্যটি ব্যবহার করে নিযুক্ত করি । এটি প্রযুক্তি স্ট্যাকটিকে যথাসম্ভব সহজ রাখে, কারণ আমার দুটি টেম্পলেট ইঞ্জিনের প্রয়োজন নেই (একটি জাভা এবং একটি জাভাস্ক্রিপ্ট)।

অপূর্ণতা স্পষ্টতই গতির হালকা বিলম্ব; বিলম্বের আধ সেকেন্ড মহাদেশগুলির মধ্যে অস্বাভাবিক নয়।

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

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

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