কোনও মেয়াদ শেষ হওয়ার জন্য কুকি সেট করুন


187

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


13
@ এসএসি: কেন এটি খারাপ জিনিস?
ব্রেইনমাস

1
কারণ এটি কুকি স্পেসিফিকেশন অনুযায়ী যাইহোক সম্ভব নয়। এটি কখনই শেষ হবে না সেট করা যাবে না।
সরফরাজ

2
আপনি এই ব্যবহার করতে $cookie->setMaxAge(2147483647);হয়, যা 2080 চেয়ে পরবর্তী সংস্করণে এবং উভয় 32 বিট এবং 64-বিট কাজ করে, সঙ্গে github.com/delight-im/PHP-Cookie
কাকের ডাক

উত্তর:


259

সমস্ত কুকি কুকির স্পেসিফিকেশন অনুসারে মেয়াদ শেষ হয় , সুতরাং এটি কোনও পিএইচপি সীমাবদ্ধতা নয়।

একটি সুদূর ভবিষ্যতের তারিখ ব্যবহার করুন। উদাহরণস্বরূপ, একটি কুকি সেট করুন যা দশ বছরের মধ্যে শেষ হয়:

setcookie(
  "CookieName",
  "CookieValue",
  time() + (10 * 365 * 24 * 60 * 60)
);

মনে রাখবেন যে আপনি যদি 3238 -বিট পিএইচপি-তে 2038 সালের পূর্বের তারিখ নির্ধারণ করেন, সংখ্যাটি প্রায় গুটিয়ে যাবে এবং আপনি একটি কুকি পাবেন যা তাত্ক্ষণিকভাবে শেষ হবে exp


8
একমত! এবং আমি মনে করি, ২০ বছরের মধ্যে, ওয়েবসাইটগুলি অনেক এগিয়ে থাকবে, সম্ভবত কোনও কুকিজ ব্যবহার করা হবে না .. @ ব্র্যাণিমাস: প্রত্যেকটি উল্লিখিত ওল্ডস্কুল সিস্টেমটি ব্যবহার করুন - বর্তমান সময়ের + সুদূর ভবিষ্যতে সময়!
ঝাঁকুনি

13
সাবধান হন যে 2018 যখন আসে তখন, আমরা যদি 64-বিট পিএইচপি ব্যবহার না করি তবে এটি 32-বিট পূর্ণসংখ্যার চারপাশে আবৃত হবে এবং ক্লায়েন্টের কাছে শূন্যের কাছাকাছি সময়ে পাঠানো হবে। (পিএইচপি-তে 25-বছরের কুকিজের জন্য এটি এখনই ঘটছে))
king

83
2018 এ এই মন্তব্যগুলিতে ফিরে আসা মজার হবে (এখন থেকে মাত্র 5 বছর দূরে) এবং Y2018 আপগ্রেড বাস্তবায়নের জন্য প্রত্যেকে ঝাঁকুনিতে দেখবে আবার 20 বছর পরে 2038 সালে Hope আশা করি আমরা সকলেই ততক্ষণে 64৪-বিট সবকিছুতে লাফিয়ে যাব make রবিবার, 4 ডিসেম্বর 292,277,026,596 এ আরও 292 বিলিয়ন বছর সমস্যা হবে না। আমি মারা যাওয়ার আগে এককথায় না পৌঁছালে আমার মনে হয় না যে আমাকে তার সম্পর্কে চিন্তা করতে হবে।
শানুহসাইন

58
2037 এর শেষে যদি কোনও ব্যক্তি একই কম্পিউটার ব্যবহার করে যা তারা এখন ব্যবহার করছে ... তবে তা দুঃখজনক হবে!
আবেলা

22
আমি এটি 2018 সালে পড়ছি, এক মুহুর্তের জন্য আতঙ্কিত, তখন বুঝলাম আমি ঠিক আছি।
ইন্টারলপার

80

সর্বাধিক মান: 2147483647

setcookie("CookieName", "CookieValue", 2147483647);

পূর্ণসংখ্যা ওভারফ্লো এড়াতে টাইমস্ট্যাম্পটি সেট করা উচিত:

2^31 - 1 = 2147483647 = 2038-01-19 04:14:07

একটি উচ্চতর মান সেট করা পুরানো ব্রাউজারগুলির সাথে সমস্যা তৈরি করতে পারে।

কুকিজ সম্পর্কে আরএফসি দেখুন :

Max-Age=value
  OPTIONAL.  The value of the Max-Age attribute is delta-seconds,
  the lifetime of the cookie in seconds, a decimal non-negative
  integer.  To handle cached cookies correctly, a client SHOULD
  calculate the age of the cookie according to the age calculation
  rules in the HTTP/1.1 specification [RFC2616].  When the age is
  greater than delta-seconds seconds, the client SHOULD discard the
  cookie.  A value of zero means the cookie SHOULD be discarded
  immediately.

এবং আরএফসি 2616, 14.6 বয়স :

যদি কোনও ক্যাশে সবচেয়ে বড় ধনাত্মক পূর্ণসংখ্যার চেয়ে বড় মান পায় যা এটি উপস্থাপন করতে পারে বা তার বয়সের কোনও গণনা ওভারফ্লো হয় তবে এটি 2147483648 (২ ^ 31) এর মান সহ একটি বয়স শিরোনাম প্রেরণ করতে হবে।

http://www.faqs.org/rfcs/rfc2616.html


39

একটি সুদূর ভবিষ্যতের নিখুঁত সময় সেট করুন :

setcookie("CookieName", "CookieValue", 2147483647);

গ্রহণযোগ্য উত্তরে প্রস্তাবিত হিসাবে বর্তমানের তুলনায় এটি গণনার চেয়ে নিরঙ্কুশ সময় ব্যবহার করা ভাল।

32 বিট সিস্টেমের সাথে সর্বাধিক মানটি উপযুক্ত:

2147483647 = 2^31 = ~year 2038

22
2 বিলিয়ন স্মরণ রাখা সহজ তবে 2038 জানুয়ারির সাথে সম্পর্কিত $ চিরকালের জন্য আদর্শ সংখ্যা 2 ^ 31 - 1 = 2147483647 হবে @
ডেভিড

13

আমার অধিকার আমাকে প্রথম পোস্টে আমার মন্তব্য করতে বাধা দেয় যাতে এটি এখানে যেতে হবে।

উপরের সঠিক উত্তর হিসাবে প্রস্তাবিত বর্তমান তারিখ থেকে 20 বছর আগে সেট করার সময় 2038 ইউনিক্স বাগ বিবেচনায় নেওয়া উচিত ।

আপনার কুকি জানুয়ারী 19, 2018 + (20 বছর) ব্রাউজার এবং বা আপনার শেষ সংস্করণগুলির উপর নির্ভর করে 2038 সমস্যাটি ভালভাবে আঘাত করতে পারে।


7

আপনি কেবল একটি শেষ না হওয়া লুপটি বলতে পারবেন না, কুকি বর্তমান তারিখ +1 হিসাবে মেয়াদউত্তীর্ণ হয় তাই এটি সর্বদা কাল যেহেতু শেষ হওয়ার তারিখটি আঘাত করে না কেন? কিছুটা ওভারকিল তবে শুধু বলছি।


1
আসলে, তার একটা কথা আছে। মাত্র 3 মাসের কিছু উপযুক্ত 'নিষ্ক্রিয়তার সময়কাল' ব্যবহার করুন এবং তারপরে প্রতিটি অনুরোধে সেই সময়ের সাথে কুকিকে রিফ্রেশ করা কিছু অর্থবোধ করে না।
স্টিজন ডি উইট

@ স্টিজেডেভিট বা মাত্র 10 বছর। তারপরে যদি ব্যবহারকারী 10 বছরের মধ্যে যান তবে এটি আপডেট করুন ...
জেজ

5

যদিও এটি ঠিক সম্ভব নয় তবে আপনি গুগল যা করেন তার মতোই কিছু করতে পারেন এবং আপনার কুকি 17 জানুয়ারী, 2038 বা সমানভাবে দূরে কিছু সমাপ্ত করার জন্য সেট করেছিলেন।

সমস্ত ব্যবহারিকতায় আপনি আপনার কুকিটি 10 ​​বছর বা 60 * 60 * 24 * 365 * 10 বছরের জন্য সেট করা থেকে ভাল হতে পারেন, যা আপনার কুকিতে বাস করবে এমন বেশিরভাগ মেশিনকেই বহন করবে।


2
এটি ২০২৮ সালের প্রথমদিকে কাজ করবে, আপনি যে মানটি উপভোগ করবেন এবং কুকিজগুলি কাজ করা বন্ধ করবে। পরিবর্তে একটি পরম মান ব্যবহার করা ভাল।
ডেভিডজব্লোক

1
ধরে নিচ্ছি যে তার কোডটি এখনও 2028-এ পুরানো মেশিনে চলবে ... আমি আরও চিন্তিত যে সবাই নির্ধারিত তারিখ আপডেট করতে ভুলে যাবে ... সফ্টওয়্যার আউটলাইভ হার্ডওয়্যার প্রবণতা রাখে।
স্টিজন ডি উইট

4

আপনি যদি ক্লায়েন্ট মেশিনে স্থায়ীভাবে-বা ব্রাউজার ক্যাশে সম্পূর্ণরূপে খালি না করা পর্যন্ত ডেটা স্থির রাখতে চান তবে জাভাস্ক্রিপ্ট স্থানীয় সঞ্চয়স্থান ব্যবহার করুন:

https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage

সেশন স্টোরেজ ব্যবহার করবেন না, কারণ এটি জিরোর সর্বোচ্চ বয়সের কুকির মতোই সাফ হয়ে যাবে।


সার্ভার-সাইড ডেটা পড়ার ক্ষেত্রে লোকালস্টোরেশন বিবেচনা করতে পারবেন না।
হোয়াইটহর্স

1

জীবনের অপ্রত্যাশিততার কারণে আমি কখনই এবং চিরকালীন দুটি শব্দ ব্যবহার করি না।

এর পরে সর্বশেষ সময়টি 1 January 1970একটি স্বাক্ষরিত 32-bitপূর্ণসংখ্যা ব্যবহার করে সংরক্ষণ করা যেতে পারে 03:14:07 on Tuesday, 19 January 2038( 231-1 = 2,147,483,647সেকেন্ড পরে 1 January 1970) । এই সীমাবদ্ধতা বছর 2038 হিসাবে পরিচিত as

setCookie("name", "value", strtotime("2038-01-19 03:14:07"));

0

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


0

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

যাইহোক, আমি এই জাতীয় প্রয়োজনীয়তা সহ কোনও কুকি দেখিনি :)


আমি একচেটিয়াভাবে জবাব দেওয়া পোলের জন্য কুকিজ অনুমান করব যা একাধিক এন্ট্রিগুলির এই প্রয়োজনীয়তা রোধ করে খুব বেশি বিরক্ত করতে চায় না।
এলোমেলো হাতি

দেখুন @ এসফরাজ এটির কম্পিউটার কুকি যা আপনি খাচ্ছেন তা নয়।
ওয়েবে

-1

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


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

-2

আপনি পারবেন না তবে আপনি যদি এখন + 100 বছর সময় নির্ধারিত সময় নির্ধারণ করেন?


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