Exercise 4: Session Storage for OTP Timer

Problem Statement

Create functions `setOtpExpiry(ts)` and `isOtpExpired()`. Expired if Date.now() > ts.

Sample Output:

setOtpExpiry(Date.now() + 60000)
isOtpExpired() => false (if < 1 minute)
isOtpExpired() => true (if > 1 minute)

Solution

const OTP_KEY = 'otp_expiry';
const setOtpExpiry = (ts) => sessionStorage.setItem(OTP_KEY, String(ts));
const isOtpExpired = () => {
  const ts = Number(sessionStorage.getItem(OTP_KEY));
  return !Number.isFinite(ts) || Date.now() > ts;
};

Explanation

Overall Goal:

  • OTP expiry time track karna.
  • Check karna ki OTP abhi valid hai ya expire ho gaya.

Line 1: Constant key

  • const OTP_KEY = 'otp_expiry';
  • Storage key constant.

Line 2: Save expiry

  • const setOtpExpiry = (ts) => sessionStorage.setItem(OTP_KEY, String(ts));
  • ts → timestamp (milliseconds since epoch).
  • String(ts) → number ko string me convert (storage requirement).
  • sessionStorage → tab close hone tak data rahega (localStorage se kam persistent).

Line 3-5: Check expiry

  • const isOtpExpired = () => {
  • const ts = Number(sessionStorage.getItem(OTP_KEY));
  • Stored string ko number me convert.
  • Agar invalid → NaN hoga.
  • return !Number.isFinite(ts) || Date.now() > ts;
  • !Number.isFinite(ts) → agar timestamp invalid hai (NaN) → expired.
  • Date.now() > ts → agar current time expiry se zyada hai → expired.
  • || → dono me se koi ek true ho to expired.

Example:

  • setOtpExpiry(Date.now() + 60000) → 1 minute expiry.
  • isOtpExpired() → 30 seconds baad → false (valid).
  • isOtpExpired() → 2 minutes baad → true (expired).

Real world:

  • OTP verification: 5-minute expiry check.
  • Password reset: token expiry validation.
  • Session management: login session timeout.