ความแตกต่างระหว่างคุกกี้และเซสชันหรือไม่


154

ฉันกำลังฝึกอบรมใน Developement เว็บและกำลังเรียนรู้เกี่ยวกับJSPและServlets ฉันมีความรู้HttpSession- ฉันใช้มันในโครงการตัวอย่างบางส่วนของฉัน

ในเบราว์เซอร์ฉันเห็นตัวเลือก "ลบคุกกี้" หากฉันลบคุกกี้มันจะลบออกHttpSessionด้วย

คุกกี้และเซสชันเหมือนกันหรือไม่ ความแตกต่างระหว่างพวกเขาคืออะไร?


ดูคำถามนี้ด้วย: < stackoverflow.com/questions/356562/… > โดยเฉพาะคำพูดเกี่ยวกับคุกกี้ที่ลงชื่อแล้ว
Joel Coehoorn

ฉันคิดว่าคำตอบที่สองสำหรับคำถามนี้เหมาะกว่าถ้าคุณเลือกคำตอบที่ดีที่สุดหลายคนจะอ่าน
Suraj Jain

คำตอบ:


180

เซสชันคือไฟล์ฝั่งเซิร์ฟเวอร์ที่มีข้อมูลผู้ใช้ในขณะที่คุกกี้เป็นไฟล์ฝั่งไคลเอ็นต์ที่มีข้อมูลผู้ใช้ เซสชันมีตัวระบุเฉพาะที่จับคู่กับผู้ใช้ที่ระบุ ตัวระบุนี้สามารถส่งผ่านใน URL หรือบันทึกลงในคุกกี้เซสชัน

ไซต์ที่ทันสมัยส่วนใหญ่ใช้วิธีที่สองโดยบันทึกตัวระบุในคุกกี้แทนที่จะส่งเป็น URL (ซึ่งมีความเสี่ยงด้านความปลอดภัย) คุณอาจใช้วิธีนี้โดยไม่รู้ตัวและโดยการลบคุกกี้คุณจะลบเซสชันที่ตรงกันอย่างมีประสิทธิภาพเมื่อคุณลบตัวระบุเซสชันที่ไม่ซ้ำกันที่มีอยู่ในคุกกี้


10
" ส่งผ่าน URL (ซึ่งมีความเสี่ยงด้านความปลอดภัย) " จริง ๆ แล้วทั้งสองวิธีมีความเสี่ยงด้านความปลอดภัย (ต่างกัน) Secret-ID ใน URLสามารถสร้างความปลอดภัยได้หากทำอย่างถูกต้องและหากผู้ใช้เข้าใจว่า URL นั้นเป็นความลับและไม่สามารถโพสต์ในฟอรัมสาธารณะได้
curiousguy

1
"ตัวระบุสามารถส่งผ่านได้ใน URL หรือบันทึกลงในคุกกี้เซสชั่น" . ที่ไหน? ฝั่งไคลเอ็นต์หรือเซิร์ฟเวอร์ ขอบคุณสำหรับการชี้แจงเพิ่มเติม
Adib Aroui

4
@whitelettersandblankspaces คุกกี้เซสชันจะถูกเก็บไว้ในไคลเอนต์ (และค่าของมันมีตัวระบุเซสชั่นที่ไม่ซ้ำกันซึ่งถูกส่งไปพร้อมกับทุกคำขอเพื่อแมปเซสชันเบราว์เซอร์กับเซสชันผู้ใช้บนเซิร์ฟเวอร์)
WynandB

306

คุกกี้เป็นเพียงสตริงข้อความสั้น ๆ ที่ถูกส่งไปมาระหว่างไคลเอนต์และเซิร์ฟเวอร์ คุณสามารถจัดเก็บname=bob; password=asdfasในคุกกี้และส่งไปมาเพื่อระบุลูกค้าในฝั่งเซิร์ฟเวอร์ คุณอาจคิดว่านี่เป็นการแลกเปลี่ยนกับพนักงานธนาคารที่ไม่มีความทรงจำระยะสั้นและต้องการให้คุณระบุตัวตนของคุณสำหรับแต่ละธุรกรรม แน่นอนว่าการใช้คุกกี้เพื่อเก็บข้อมูลประเภทนี้นั้นไม่ปลอดภัยอย่างน่ากลัว คุกกี้มีขนาด จำกัด

ตอนนี้เมื่อพนักงานรับฝากของธนาคารรู้เกี่ยวกับปัญหาความจำของเขา / เธอเขา / เธอสามารถเขียนข้อมูลของคุณลงบนแผ่นกระดาษและกำหนดหมายเลขประจำตัวแบบย่อให้คุณได้ จากนั้นแทนที่จะให้หมายเลขบัญชีและใบขับขี่สำหรับแต่ละธุรกรรมคุณสามารถพูดว่า "ฉันเป็นลูกค้า 12"

การแปลไปยังเว็บเซิร์ฟเวอร์: เซิร์ฟเวอร์จะเก็บข้อมูลที่เกี่ยวข้องในวัตถุเซสชันและสร้างรหัสเซสชันซึ่งจะส่งกลับไปยังไคลเอนต์ในคุกกี้ เมื่อไคลเอนต์ส่งคุกกี้กลับมาเซิร์ฟเวอร์ก็สามารถค้นหาวัตถุเซสชันโดยใช้ ID ดังนั้นหากคุณลบคุกกี้เซสชันจะหายไป

อีกทางเลือกหนึ่งคือให้เซิร์ฟเวอร์ใช้การเขียน URL ใหม่เพื่อแลกเปลี่ยนรหัสเซสชัน

สมมติว่าคุณมีลิงค์ - www.myserver.com/myApp.jsp คุณสามารถเข้าไปที่หน้านั้นและเขียนทุก ๆ URL เป็นwww.myserver.com/myApp.jsp?sessionID=asdfหรือแม้กระทั่งwww.myserver.com/asdf/myApp.jspแลกเปลี่ยนตัวระบุในแบบนั้น เทคนิคนี้ได้รับการจัดการโดยเว็บคอนเทนเนอร์แอปพลิเคชันและมักจะเปิดใช้งานโดยการตั้งค่าการกำหนดค่าให้ใช้เซสชันที่ไม่มีเนื้อหา


29
นี่คือคำอธิบายที่ยอดเยี่ยมที่ทอดสมอในการเปรียบเทียบที่ยอดเยี่ยมในโลกแห่งความจริง คำตอบนี้ควร upvoted วิธีเพิ่มเติม มือใหม่สามารถเข้าถึงได้มากซึ่งเป็นคนที่น่าจะถามคำถามเช่นนั้นมากที่สุด
798719

2
จะเกิดอะไรขึ้นถ้าฉันเป็นผู้ใช้และคนอื่นรู้จักรหัสเซสชันของฉัน
Maria Ines Parnisari

3
@ I19 อาจเป็นไปได้ว่าพวกเขาสามารถแอบอ้างเป็นคุณ สิ่งนี้เกิดขึ้นในสถานการณ์การพนันออนไลน์ - สูดดม wifi ของโรงแรมขโมยรหัสเซสชันและเข้าถึงบัญชี การรักษาความปลอดภัยเซสชั่นเป็นอีกเรื่องหนึ่งโดยสิ้นเชิง
Chris Cudmore

2
ดังนั้นใครเป็นคนสร้างคุกกี้ก่อน เซิร์ฟเวอร์หรือไคลเอนต์? หรือขึ้นอยู่กับแอปพลิเคชันนี้ (ฉันจะบอกเซิร์ฟเวอร์เพราะไม่เช่นนั้นมันก็ก่อให้เกิดภัยคุกคามด้านความปลอดภัย แต่ฉันคิดว่ามันควรค่าแก่การพูดถึงเหรอ?)
nha

4
@nha เซิร์ฟเวอร์สร้างเซสชันและส่งผ่านการตอบกลับด้วยคุกกี้ เซสชันถูกสร้างขึ้นขึ้นอยู่กับตรรกะของแอปพลิเคชันเมื่อคุณต้องการสร้าง ลูกค้ายังสามารถสร้างคุกกี้ได้ แต่อาจไม่ได้ใช้ประโยชน์อย่างมากในสถานการณ์ของการระบุเซสชันเนื่องจากเซิร์ฟเวอร์อาจไม่ทราบว่าค่านั้นหมายถึงอะไรในเซสชัน
Azeem

4

คุกกี้และเซสชันต่างเก็บข้อมูลเกี่ยวกับผู้ใช้ (เพื่อทำให้คำขอ HTTP เป็นประโยชน์) แต่ความแตกต่างก็คือคุกกี้จะเก็บข้อมูลไว้ที่ฝั่งไคลเอ็นต์ (เบราว์เซอร์) และเซสชันจะเก็บข้อมูลบนฝั่งเซิร์ฟเวอร์ คุกกี้มีข้อ จำกัด ในแง่ที่ว่ามันเก็บข้อมูลเกี่ยวกับผู้ใช้ที่ จำกัด และจัดเก็บเนื้อหาที่ จำกัด สำหรับผู้ใช้แต่ละคนเท่านั้น เซสชั่นไม่ จำกัด ในลักษณะนี้


3

มีส่วนร่วมมากในเธรดนี้แล้วเพียงแค่สรุปไดอะแกรมลำดับเพื่อแสดงให้เห็นในอีกทางหนึ่ง

ป้อนคำอธิบายรูปภาพที่นี่

ลิงค์นี้ยังเป็นลิงค์ที่ดีเกี่ยวกับหัวข้อนี้https://web.stanford.edu/~ouster/cgi-bin/cs142-fall10/lecture.php?topic=cookie


1

คุกกี้นั้นเป็นอาร์เรย์ระดับโลกที่เข้าถึงได้ผ่านเว็บเบราว์เซอร์ หลายครั้งที่ใช้ในการส่ง / รับค่า มันทำหน้าที่เป็นกลไกการจัดเก็บเพื่อเข้าถึงค่าระหว่างแบบฟอร์ม คุกกี้สามารถปิดการใช้งานโดยเบราว์เซอร์ซึ่งเพิ่มข้อ จำกัด ในการใช้งานเมื่อเปรียบเทียบกับเซสชัน

เซสชั่นสามารถกำหนดเป็นสิ่งระหว่างการเข้าสู่ระบบและออกจากระบบ เวลาระหว่างการล็อกอินของผู้ใช้และการออกจากระบบเป็นเซสชัน เซสชั่นเก็บค่าเฉพาะเวลาเซสชั่นคือก่อนที่จะออกจากระบบ เซสชันถูกใช้เพื่อติดตามกิจกรรมของผู้ใช้เมื่อเขาเข้าสู่ระบบ


0

Google JSESSIONID สิ่งนี้จะอธิบายถึงวิธีการที่ Servlet API ใช้การเขียน URL ใหม่เป็นครั้งแรกจากนั้นหากเปิดใช้งานคุกกี้คุกกี้เพื่อจัดการเซสชัน

HTTP ไม่มีสถานะดังนั้นเบราว์เซอร์ไคลเอ็นต์จะต้องส่ง ID ของเซสชันไปยังเซิร์ฟเวอร์พร้อมกับคำขอแต่ละรายการ เซิร์ฟเวอร์จะใช้รหัสนี้เพื่อดึงข้อมูลใด ๆ สำหรับเซสชันนั้นโดยใช้วิธีใดก็ตามเพื่อให้สามารถใช้งานได้ตลอดอายุการร้องขอ


0

เซสชันใน Asp.net:

1. รักษาข้อมูลที่ครอบคลุมทั่วทั้งแอปพลิเคชัน

2. ใช้ข้อมูลถ้าเซสชันปัจจุบันยังมีชีวิตอยู่ หากเราต้องการข้อมูลบางอย่างที่สามารถเข้าถึงได้จากหลาย ๆ acitons และดูเซสชันเป็นวิธีการจัดเก็บและเรียกคืนข้อมูล

3. เซสชันคือไฟล์ฝั่งเซิร์ฟเวอร์ที่มีข้อมูลผู้ใช้ [เซสชันเป็นตัวระบุเฉพาะที่จับคู่กับผู้ใช้เฉพาะ]

การแปลไปยังเว็บเซิร์ฟเวอร์: เซิร์ฟเวอร์จะเก็บข้อมูลที่เกี่ยวข้องในวัตถุเซสชันและสร้างรหัสเซสชันซึ่งจะส่งกลับไปยังไคลเอนต์ในคุกกี้ เมื่อไคลเอนต์ส่งคุกกี้กลับมาเซิร์ฟเวอร์ก็สามารถค้นหาวัตถุเซสชันโดยใช้ ID ดังนั้นหากคุณลบคุกกี้เซสชันจะหายไป


0

คุกกี้เป็นวิธีการใช้เซสชันระหว่างไคลเอนต์และเซิร์ฟเวอร์ด้วยวิธีนี้ข้อมูลเซสชันที่เก็บไว้ในคุกกี้ แต่นี่ไม่ใช่วิธีเดียวในการเก็บข้อมูลเซสชันอีกวิธีหนึ่งคือข้อมูลเซสชันการจัดเก็บใน Url


0

คุกกี้จะถูกเก็บไว้ในเบราว์เซอร์เป็นรูปแบบไฟล์ข้อความมันถูกเก็บไว้ในปริมาณที่ จำกัด ของข้อมูลมันเป็นเพียงการอนุญาต4kb [4096bytes]ตัวแปร $ _ COOKIE จะไม่ถือหลายคุกกี้ที่มีชื่อเดียวกัน

เราสามารถเข้าถึงค่าคุกกี้ใน easily.So มันเป็นความปลอดภัยน้อยลงได้โดยง่ายsetcookie ()ฟังก์ชั่นจะต้องปรากฏก่อน

<html> 

แท็ก

เซสชั่นจะถูกเก็บไว้ในฝั่งเซิร์ฟเวอร์มันถูกเก็บไว้ไม่ จำกัด จำนวนของข้อมูลมันถือตัวแปรหลายตัวในเซสชั่น เราไม่สามารถเข้าถึงค่าคุกกี้ใน easily.So มันเป็นความปลอดภัยมากขึ้น

ลิงค์: ความแตกต่างระหว่างคุกกี้และเซสชัน


จริงๆแล้วคุณสามารถเก็บข้อมูลหลาย ๆ อย่างไว้ในคุกกี้ได้ นอกจากนี้เซสชันไม่สามารถเก็บข้อมูลได้ไม่ จำกัด จำนวนจริงๆ คุณถูก จำกัด ด้วยจำนวน RAM ที่คุณมี
Koray Tugay
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.