เครื่องมือสำหรับนักพัฒนา · ตัวแปลงการประทับเวลา Unix
ตรวจสอบยุคหมดอายุของคุกกี้หรือแคชก่อนจัดส่ง
· เหตุใดจึงสำคัญ
การประทับเวลา การดีบัก การพัฒนาเว็บ
ค่าการหมดอายุมีการคำนวณ ไม่ค่อยอ่าน และไม่ถูกต้องในลักษณะที่จะแสดงในภายหลังเท่านั้น โพสต์นี้แสดงรายการสถานที่ที่ยุคสมัยสัมบูรณ์ปรากฏ (Redis, memcached, URL ที่ลงนาม, คุกกี้) และแสดงวิธีการตรวจสอบก่อนที่จะถึงการใช้งานจริง
แคชที่หมดอายุทันที — การหมดอายุที่คำนวณไว้ซึ่งเขียนในหน่วยที่ไม่ถูกต้องและอัตราการเข้าถึงที่ลดลงเหลือศูนย์
อัตราการเข้าถึงแคชที่ยุบทันทีหลังจากการปรับใช้อาจมาจากการหมดอายุที่คำนวณในขนาดที่ไม่ถูกต้อง แคชทำงานอย่างถูกต้องเมื่อได้รับหลายทศวรรษที่ผ่านมา ก่อนที่จะปรับหน่วยความจำหรือการขับไล่ ให้ตรวจสอบหมายเลขที่แน่นอนที่ส่งมาจากเส้นทางการปรับใช้
เปรียบเทียบกับเวลาในการปรับใช้และอายุการใช้งานที่ต้องการ ToolAcre สามารถเรนเดอร์วินาทีและมิลลิวินาทีได้อย่างชัดเจน ทำให้มองเห็นปัจจัยของ-1,000 ที่ไม่ตรงกันได้ เก็บคำสั่งดิบหรือการกำหนดค่าไว้ข้างผลลัพธ์ การแทนที่ค่าในการผลิตด้วยตนเองโดยไม่ต้องแก้ไขการคำนวณจะรับประกันการเกิดซ้ำ
ตรวจสอบว่ารายการที่ล้มเหลวถูกสร้างขึ้นด้วยรุ่นใหม่หรือไม่ในขณะที่รายการที่เก่ากว่ายังคงอยู่ ความสัมพันธ์ดังกล่าวสามารถแยกการคำนวณการหมดอายุออกจากแรงกดดันในการไล่ออกที่ไม่เกี่ยวข้องกัน
เมื่อการหมดอายุที่แน่นอนปรากฏขึ้น — Redis EXPIREAT เทียบกับ PEXPIREAT กฎสามสิบวันของ memcached พารามิเตอร์การหมดอายุ URL ที่ลงนามและแอตทริบิวต์คุกกี้หมดอายุ
การหมดอายุโดยสัมบูรณ์ปรากฏในหลายระบบ แต่หน่วยและกฎขอบไม่สามารถใช้แทนกันได้ สมุดงานแสดงรายการผลิตภัณฑ์ที่มีชื่อหลายรายการ พื้นที่เก็บข้อมูลการประทับเวลาไม่ได้ใช้หรือจัดทำเอกสารโปรโตคอลของตน ตรวจสอบแต่ละคำสั่ง พารามิเตอร์การสืบค้น หรือแอตทริบิวต์ด้วยสัญญาที่เชื่อถือได้ก่อนที่จะใช้ยุค
การวินิจฉัยที่ใช้ร่วมกันยังคงใช้ได้: จับสิ่งที่ถูกส่งไป ระบุว่าจะตั้งชื่อทันใจหรือไม่ ระบุหน่วยและแปลง หลีกเลี่ยงการถ่ายโอนกฎจากคำสั่งแคชหนึ่งไปยังอีกคำสั่งหนึ่งเนื่องจากชื่อของพวกเขาดูคล้ายกัน วันที่แปลงอย่างถูกต้องยังคงไม่ถูกต้องสำหรับเป้าหมาย API
API การหมดอายุสัมบูรณ์จะแตกต่างกัน ตรวจสอบร้านค้าเฉพาะ ผู้ลงนาม URL หรือสัญญาคุกกี้
ญาติ TTL ตอบว่า “นานแค่ไหนจากการผ่าตัด” ในขณะที่ยุคสมัยที่แน่นอนตอบว่า "ในตอนนั้น?" การเพิ่ม TTL ในเวลาปัจจุบันจะสร้างค่าสัมบูรณ์ ส่งต้นฉบับ TTL ไปยังฟิลด์สัมบูรณ์โดยวางไว้ใกล้กับยุค การส่งจำนวนสัมบูรณ์ไปยังฟิลด์แบบสัมพันธ์สามารถรักษาข้อมูลไว้ได้นานกว่าที่ตั้งใจไว้มาก
ตั้งชื่อตัวแปรตามความหมาย เช่น `ttlSeconds` และ `expiresAtMs` และแปลงที่ไซต์การโทรที่ทราบสัญญา การทดสอบควรหยุดนาฬิกาอ้างอิง ดังนั้นการหมดอายุที่คาดไว้จึงเป็นสิ่งที่กำหนดได้ หลีกเลี่ยงการยืนยันเพียงว่าผลลัพธ์นั้นยิ่งใหญ่กว่าตอนนี้ ที่สามารถส่งต่อค่าต่างๆ ไปได้ตลอดช่วงชีวิตที่ผิดพลาดอย่างมหันต์
กับดักเขตเวลาในการหมดอายุ - การหมดอายุหมายถึง 'เที่ยงคืน' ที่คำนวณในโซนของเซิร์ฟเวอร์แทนที่จะเป็นของผู้ใช้หรือ UTC
“หมดอายุตอนเที่ยงคืน” ไม่สมบูรณ์จนกว่าจะมีการตั้งชื่อโซนเที่ยงคืน เที่ยงคืน UTC เวลาท้องถิ่นของเซิร์ฟเวอร์และเวลาเที่ยงคืนท้องถิ่นของผู้ใช้อาจเป็นช่วงเวลาที่แตกต่างกันและแม้แต่วันที่ในปฏิทินที่แตกต่างกัน เครื่องมือเลือกวันที่-เวลาของ ToolAcre ถือว่าวันที่-เวลาแบบไม่มีโซนเป็นเวลาท้องถิ่นของเบราว์เซอร์และบอกเช่นนั้น
สำหรับการหมดอายุของโครงสร้างพื้นฐาน UTC วันที่-เวลาที่ชัดเจนมักจะลบการพึ่งพาสภาพแวดล้อม สำหรับนโยบายผู้ใช้ ให้คงโซนที่มีชื่อที่ต้องการไว้ในเลเยอร์การกำหนดเวลาก่อนที่จะแก้ไขในทันที ตัวแปลงสามารถตรวจสอบยุคที่ได้รับการแก้ไขแล้ว แต่ไม่ได้เลือกว่าเวลาเที่ยงคืนใดหมายถึงข้อกำหนด
เก็บวลีนโยบายและทันทีที่ได้รับการแก้ไขแยกกันในระหว่างการดีบัก นั่นแสดงให้เห็นว่าความขัดแย้งเริ่มต้นขึ้นในการตีความข้อกำหนดหรือในเลขคณิตยุคต่อมา
“เที่ยงคืน” ต้องมีการตีความที่ชัดเจนก่อนที่จะหมดอายุทันที
ลองนึกภาพการเปิดตัวที่ `2025-02-03T10:30:00Z` ซึ่งจะหมดอายุในอีกวันข้างหน้าอย่างแน่นอน ค่าสัมบูรณ์ที่คาดไว้คือ 1,738,668,600 วินาทีหรือ 1,738,668,600,000 มิลลิวินาที ซึ่งเท่ากับ `2025-02-04T10:30:00.000Z` แปลงเอาต์พุตของสคริปต์ภายใต้หน่วยที่ประกาศไว้แล้วเปรียบเทียบ
ค่า 86,400 ในฟิลด์วินาทีสัมบูรณ์จะแสดงผลเป็น 1970-01-02 ซึ่งแสดงให้เห็นว่ามีการส่งระยะเวลาโดยไม่เพิ่ม release Instant ค่าที่คูณสองครั้งด้วย 1,000 อาจอยู่นอกช่วงวันที่ ความล้มเหลวทั้งสองมีข้อมูลมากกว่าตัววัด "แคชที่พลาด" ทั่วไป
เดลต้าตลอดทั้งวันสามารถยืนยันได้โดยตรงเป็น 86,400 วินาที การตรวจสอบระยะเวลานี้จะยังคงมีเสถียรภาพ แม้ว่าการเรนเดอร์ภายในเครื่องของผู้ตรวจสอบจะแตกต่างจากกำหนดการปรับใช้ UTC ก็ตาม
ตัวอย่างการทำงาน: ตรวจสอบการหมดอายุที่แน่นอนจากสคริปต์การปรับใช้
ก่อนที่จะรวม ให้เปิดเผยค่าที่คำนวณได้ในการทดสอบหน่วยหรือเอาต์พุตการทดลองเรียกใช้ และตรวจสอบเป็นวันที่ นอกจากนี้ ให้ลบช่วงเวลาอ้างอิงที่ทราบเพื่อยืนยันอายุการใช้งานที่ต้องการด้วย เช็คทั้งสองนี้ตรวจพบข้อผิดพลาดที่แตกต่างกัน: วันที่ที่เป็นไปได้ในเดือนที่ไม่ถูกต้อง และวันที่ที่ถูกต้องซึ่งได้รับจากสมมติฐานในท้องถิ่นที่เปราะบาง
ใช้อุปกรณ์ติดตั้งแบบตายตัวแทนนาฬิกาแขวนในการยืนยัน จากนั้นทดสอบขอบเขตการทำให้เป็นอนุกรมจริงเพื่อให้ไคลเอ็นต์ไม่แปลงค่าวินาทีอีกครั้ง ToolAcre ทำหน้าที่เป็นการตรวจสอบโดยเจ้าหน้าที่อิสระ ไม่ใช่การป้องกันอัตโนมัติเพียงอย่างเดียว
สิ่งนี้ไม่ครอบคลุมถึง — HTTP-การจัดรูปแบบวันที่สำหรับส่วนหัว Expires ซึ่งใช้รูปแบบข้อความแทนที่จะเป็นยุค
อินเทอร์เฟซการหมดอายุบางตัวใช้รูปแบบวันที่ที่เป็นข้อความมากกว่ายุค พื้นที่เก็บข้อมูลนี้สร้าง ISO สำหรับการแสดงผลและแยกวิเคราะห์อินพุตที่เข้ากันได้กับวันที่ แต่จะไม่สร้างวันที่ของส่วนหัวเฉพาะโปรโตคอล ตัวเลขที่แปลงอย่างถูกต้องไม่ได้พิสูจน์ว่าส่วนหัวของข้อความมีไวยากรณ์หรือป้ายกำกับโซนที่จำเป็น
ทำการฟอร์แมตในอะแดปเตอร์เฉพาะที่ผ่านการทดสอบแล้วสำหรับโปรโตคอลนั้น อย่าวางสตริงของมนุษย์ลงในฟิลด์ตัวเลข หรือถือว่าเอาต์พุต ISO สามารถแทนที่รูปแบบการโยงทุกรูปแบบได้ การหมดอายุทันทีและการทำให้ซีเรียลไลซ์เป็นชั้นที่แยกจากกัน และแต่ละเลเยอร์สมควรได้รับการตรวจสอบสัญญาของตัวเอง
รูปแบบการหมดอายุของข้อความเป็นสัญญาที่แยกจากยุคตัวเลข
การหมดอายุที่แน่นอนทุกครั้งควรอ่านหนึ่งครั้งเป็นวันที่ของมนุษย์ก่อนที่จะเผยแพร่ การตรวจสอบสั้นๆ จะตรวจจับข้อผิดพลาดในการตีความหน่วย ระยะเวลาเทียบกับทันที และเที่ยงคืนในขณะที่โค้ดยังสามารถตรวจสอบได้ นอกจากนี้ยังสร้างผลลัพธ์ที่คาดหวังอย่างเป็นรูปธรรมสำหรับการทดสอบการถดถอย
ใช้ตัวแปลงกับหน่วยเป้าหมายที่ชัดเจน เปรียบเทียบ UTC กับนโยบาย และแก้ไขการคำนวณแทนอาการที่เก็บไว้ การหมดอายุที่อ่านได้ไม่เพียงพอในการพิสูจน์ความถูกต้องของ target-API แต่การหมดอายุที่อ่านไม่ได้ไม่ควรถึงการใช้งานจริงโดยไม่มีใครสังเกตเห็น
แนบ ISO ทันทีที่คาดหวังไว้กับการตรวจสอบการเปลี่ยนแปลง แต่เก็บตัวเลขยืนยันการดำเนินการไว้ การตรวจสอบโดยมนุษย์และการถดถอยของเครื่องจักรจะปกป้องส่วนเสริมของขอบเขต