আমি মেয়াদ উত্তীর্ণ হয়ে থাকা সেশনের সাহায্যে কোনও ব্যবহারকারীকে স্বয়ংক্রিয়ভাবে লগআউট করার চেষ্টা করার সময় আমি এতে হোঁচট খেয়েছি। আমার সমাধানটি হ'ল কেবল একদিন পরে সময়সীমা পুনরায় সেট করা এবং ক্লিয়ারটাইমআউট ব্যবহার করতে কার্যকারিতা রাখা।
এখানে একটি সামান্য নমুনা উদাহরণ:
Timer = function(execTime, callback) {
if(!(execTime instanceof Date)) {
execTime = new Date(execTime);
}
this.execTime = execTime;
this.callback = callback;
this.init();
};
Timer.prototype = {
callback: null,
execTime: null,
_timeout : null,
/**
* Initialize and start timer
*/
init : function() {
this.checkTimer();
},
/**
* Get the time of the callback execution should happen
*/
getExecTime : function() {
return this.execTime;
},
/**
* Checks the current time with the execute time and executes callback accordingly
*/
checkTimer : function() {
clearTimeout(this._timeout);
var now = new Date();
var ms = this.getExecTime().getTime() - now.getTime();
/**
* Check if timer has expired
*/
if(ms <= 0) {
this.callback(this);
return false;
}
/**
* Check if ms is more than one day, then revered to one day
*/
var max = (86400 * 1000);
if(ms > max) {
ms = max;
}
/**
* Otherwise set timeout
*/
this._timeout = setTimeout(function(self) {
self.checkTimer();
}, ms, this);
},
/**
* Stops the timeout
*/
stopTimer : function() {
clearTimeout(this._timeout);
}
};
ব্যবহার:
var timer = new Timer('2018-08-17 14:05:00', function() {
document.location.reload();
});
এবং আপনি stopTimer
পদ্ধতিটি দিয়ে এটি সাফ করতে পারেন :
timer.stopTimer();
delay >>> 0
ঘটে যায়, তাই বিলম্বটি শূন্য হয়। যে কোনও উপায়ে, 32-বিট স্বাক্ষরযুক্ত ইন্ট হিসাবে বিলম্ব সঞ্চিত রয়েছে এই আচরণটি ব্যাখ্যা করে। ধন্যবাদ!