2012-10-11 17 views
8

Khi chạy một ứng dụng web java với api servlet (như các trang JSF hoặc JSP), ở đâu đó dọc theo dòng, một SessionID 'duy nhất' được tạo để xác định phiên của người dùng.Phiên sessionID được tạo như thế nào?

Tôi tự hỏi làm thế nào các sessionID này được tạo ra. Họ có bao gồm IP của khách hàng không? Dấu thời gian? Số ngẫu nhiên?

Thứ hai, tôi tự hỏi nơi thế hệ này xảy ra? Điều này có phụ thuộc vào máy chủ chạy ứng dụng không?

+2

Vì vậy, điều này có vẻ như không có bảo vệ out-of-the-box chống lại phát lại phiên. Chúng tôi đã thử nghiệm nó và bạn thực sự có thể giả mạo với giá trị cookie JSESSIONID của bạn để chiếm đoạt phiên của người dùng khác. :( –

Trả lời

3

Thuật toán A java.security.MessageDigest thường được sử dụng.

Thông thường ID được tạo chỉ là một tập hợp các số ngẫu nhiên, cho đến độ dài yêu cầu, nhưng nó thay đổi theo thuật toán được sử dụng trong các thùng chứa servlet khác nhau.

Trong Tomcat6, ví dụ, có một cái nhìn tại địa chỉ:

ManagerBase.sessionIdLength 

ManagerBase.createSession() //which calls generateSessionId() 

Xem http://www.docjar.com/html/api/org/apache/catalina/session/ManagerBase.java.html