2008-12-11 61 views
138

Tôi đang đào tạo về phát triển web và đang tìm hiểu về JSP & Servlets. Tôi có một số kiến ​​thức về HttpSession - Tôi đã sử dụng nó trong một số dự án mẫu của mình.Sự khác biệt giữa cookie và phiên?

Trong trình duyệt, tôi đã thấy tùy chọn "xóa cookie". Nếu tôi xóa các cookie, nó cũng sẽ xóa HttpSession.

Cookie và phiên có giống nhau không? Sự khác nhau giữa chúng là gì?

+0

Cũng thấy câu hỏi này: Cụ thể, nhận xét về cookie đã ký. –

+0

Tôi nghĩ câu trả lời thứ hai cho câu hỏi này là thích hợp hơn, Nếu bạn chọn đó là câu trả lời hay nhất, nhiều người sẽ đọc nó. –

Trả lời

167

Phiên là các tệp phía máy chủ chứa thông tin người dùng, trong khi Cookie là các tệp phía máy khách chứa thông tin người dùng. Phiên có một số nhận dạng duy nhất để ánh xạ chúng tới những người dùng cụ thể. Mã định danh này có thể được chuyển vào URL hoặc được lưu vào cookie phiên.

Hầu hết các trang web hiện đại sử dụng phương pháp thứ hai, lưu số nhận dạng trong Cookie thay vì chuyển nó trong URL (đặt ra rủi ro bảo mật). Có thể bạn đang sử dụng cách tiếp cận này mà không biết, và bằng cách xóa cookie, bạn sẽ xóa các phiên phù hợp của mình một cách hiệu quả khi bạn xóa số nhận dạng phiên duy nhất có trong cookie.

+6

"_passing nó trong một URL (trong đó đặt ra một nguy cơ bảo mật) ._" thực sự cả hai cách tiếp cận có nguy cơ bảo mật (những người khác nhau). _Secret-ID trong URL_ có thể được thực hiện an toàn nếu được thực hiện đúng cách và nếu người dùng hiểu rằng URL là bí mật và không thể được đăng trong diễn đàn công khai. – curiousguy

+0

"Mã định danh có thể được chuyển vào URL hoặc được lưu vào cookie phiên". . Ở đâu? khách hàng hoặc phía máy chủ? cảm ơn bạn đã làm rõ thêm. –

+4

@whitelettersandblankspaces Cookie phiên được lưu trữ trên máy khách (và giá trị của nó chứa mã định danh phiên duy nhất được gửi cùng với mọi yêu cầu để ánh xạ phiên trình duyệt đến phiên người dùng trên máy chủ). – WynandB

1

Google JSESSIONID. Điều này sẽ giải thích cách Servlet API ban đầu sử dụng URL viết lại và sau đó, nếu cookie được bật, cookie để quản lý phiên.

HTTP không có trạng thái nên trình duyệt của khách hàng phải gửi id phiên của máy chủ đến máy chủ theo từng yêu cầu. Máy chủ, thông qua bất kỳ phương tiện nào, sử dụng id này để truy xuất bất kỳ dữ liệu nào cho phiên đó làm cho nó có sẵn trong suốt thời gian yêu cầu.

270

Cookie chỉ đơn giản là chuỗi văn bản ngắn được gửi qua lại giữa máy khách và máy chủ. Bạn có thể lưu trữ name=bob; password=asdfas trong cookie và gửi qua lại để xác định ứng dụng khách ở phía máy chủ. Bạn có thể nghĩ về điều này khi thực hiện trao đổi với nhân viên ngân hàng không có ký ức ngắn hạn và cần bạn tự xác định mình cho mỗi giao dịch. Tất nhiên bằng cách sử dụng một cookie để lưu trữ thông tin loại này là không an toàn khủng khiếp. Cookies cũng bị giới hạn về kích thước.

Bây giờ, khi nhân viên ngân hàng biết về vấn đề bộ nhớ của họ, anh/cô ấy có thể ghi lại thông tin của bạn trên một tờ giấy và gán cho bạn một số id ngắn. Sau đó, thay vì cung cấp số tài khoản và giấy phép lái xe cho mỗi giao dịch, bạn chỉ có thể nói "Tôi khách hàng 12"

Dịch sang máy chủ web: Máy chủ sẽ lưu trữ thông tin thích hợp trong đối tượng phiên và tạo một ID phiên mà nó sẽ gửi lại cho khách hàng trong một cookie. Khi khách hàng gửi lại cookie, máy chủ có thể chỉ cần tra cứu đối tượng phiên sử dụng ID. Vì vậy, nếu bạn xóa cookie, phiên sẽ bị mất.

Một giải pháp thay thế khác là máy chủ sử dụng viết lại URL để trao đổi id phiên.

Giả sử bạn có liên kết - www.myserver.com/myApp.jsp Bạn có thể xem qua trang và viết lại mọi URL là www.myserver.com/myApp.jsp?sessionID=asdf hoặc thậm chí www.myserver.com/asdf/myApp.jsp và trao đổi số nhận dạng theo cách đó. Kỹ thuật này được xử lý bởi thùng chứa ứng dụng web và thường được bật bằng cách thiết lập cấu hình để sử dụng các phiên không cần thiết.

+24

Đây là một lời giải thích tuyệt vời được neo trong một sự tương tự trong thế giới thực tuyệt vời. Câu trả lời này nên được upvoted cách nhiều hơn nữa. Rất dễ tiếp cận với những người mới, những người có nhiều khả năng nhất để hỏi một câu hỏi như vậy. – user798719

+2

Điều gì sẽ xảy ra nếu tôi là người dùng và một người khác biết ID phiên của tôi? –

+3

@ I19 Có thể, họ có thể mạo danh bạn. Điều này đã xảy ra trong các tình huống cờ bạc trực tuyến - Đánh hơi wifi của khách sạn, lấy cắp ID phiên và truy cập tài khoản. Đảm bảo một phiên là một câu chuyện hoàn toàn khác. –

4

Cookie và phiên cả thông tin cửa hàng về người dùng (để yêu cầu HTTP stateful) nhưng sự khác biệt là cookie lưu trữ thông tin về phía máy khách (trình duyệt) và thông tin lưu trữ phiên ở phía máy chủ. Cookie bị giới hạn theo nghĩa là nó lưu trữ thông tin về người dùng bị hạn chế và chỉ lưu trữ nội dung giới hạn cho mỗi người dùng. Một phiên không phải là giới hạn theo cách như vậy.

0

Phiên trong Asp.net:

1. Duy trì dữ liệu trên toàn bộ ứng dụng.

2.Persists dữ liệu nếu phiên hiện tại vẫn còn. Nếu chúng ta cần một số dữ liệu để truy cập từ nhiều bộ điều khiển acitons và xem phiên là cách lưu trữ và truy xuất dữ liệu.

3.Sessions là các tệp phía máy chủ chứa thông tin người dùng. [Phiên là số nhận dạng duy nhất sẽ ánh xạ chúng tới người dùng cụ thể]

Dịch sang máy chủ web: Máy chủ sẽ lưu trữ thông tin thích hợp trong đối tượng phiên và tạo ID phiên mà máy chủ sẽ gửi lại cho khách hàng trong cookie . Khi máy khách gửi lại cookie, máy chủ có thể chỉ cần tra cứu đối tượng phiên sử dụng ID. Vì vậy, nếu bạn xóa cookie, phiên sẽ bị mất.

0

Cookies được lưu trữ trong trình duyệt như một tập tin văn bản được lưu trữ format.It lượng giới hạn của data.It chỉ cho phép 4KB [4096bytes]. $ _ Biến COOKIE không sẽ tổ chức nhiều cookie có cùng tên

chúng ta có thể truy cập vào các giá trị cookie trong easily.So nó là kém an toàn .Công setcookie() chức năng phải có TRƯỚC

<html> 

t ag.

Phiên được lưu trữ ở phía máy chủ.Đó được lưu trữ lượng dữ liệu không hợp lệ. Nó đang giữ nhiều biến trong phiên. chúng tôi không thể truy cập các giá trị cookie một cách dễ dàng.Vì vậy, nó là an toàn hơn.

Links:difference-between-cookies-and-sessions

+0

Vâng, thực sự bạn có thể chứa nhiều dữ liệu trong cookie. Ngoài ra, phiên có thể không thực sự giữ số lượng dữ liệu không giới hạn. Bạn bị giới hạn bởi lượng RAM bạn có. –

+0

bạn có thể kiểm tra và báo cho bạn biết không ??? http://php.net/manual/en/function.setcookie.php – Elangovan

1

Cookie cơ bản là một mảng toàn cầu truy cập qua trình duyệt web. Nhiều lần được sử dụng để gửi/nhận các giá trị. nó hoạt động như một cơ chế lưu trữ để truy cập các giá trị giữa các biểu mẫu. Cookies có thể bị vô hiệu hóa bởi trình duyệt mà thêm một ràng buộc để sử dụng của họ so với phiên.

Phiên có thể được định nghĩa là nội dung giữa đăng nhập và đăng xuất. thời gian giữa người dùng đăng nhập và đăng xuất là một phiên. Phiên lưu trữ giá trị chỉ cho thời gian phiên, tức là trước khi đăng xuất. Phiên được sử dụng để theo dõi các hoạt động của người dùng, sau khi anh ấy đăng nhập.

0

Cookie là một cách để triển khai phiên giữa máy khách và máy chủ, theo cách này thông tin phiên được lưu trữ trong cookie. Nhưng đây không phải là cách duy nhất để giữ thông tin phiên, một cách khác là lưu trữ thông tin phiên trong Url.

Các vấn đề liên quan