यदि उपयोगकर्ता लॉगआउट के बिना ब्राउज़र को बंद करता है।
विशेष रूप से यह मामला मुश्किल है और पता लगाने के लिए विश्वसनीय नहीं है। आप जावास्क्रिप्ट में beforeunload
ईवेंट का उपयोग कर सकते हैं, लेकिन आप पूरी तरह से इस बात पर निर्भर हैं कि ब्राउज़र में जेएस सक्षम है या नहीं, विशेष ब्राउज़र इस गैर मानक घटना का समर्थन करता है (उदा। ओपेरा नहीं करता है)। यह उन प्रमुख कारणों में से एक है जो मैं लॉगिन को रोकने के बजाय पहले लॉग इन उपयोगकर्ता को लॉगआउट करने का सुझाव दूंगा। यह भी उपयोगकर्ता के अनुकूल और सुरक्षित है कि उपयोगकर्ता दूसरे कंप्यूटर से लॉगआउट करने के लिए "भूल गया" है।
सबसे आसान तरीका User
एक static Map<User, HttpSession>
चर राशि है और यह HttpSessionBindingListener
(और Object#equals()
और Object#hashCode()
) को लागू करने देने के लिए है।
public class User implements HttpSessionBindingListener {
// All logins.
private static Map<User, HttpSession> logins = new HashMap<User, HttpSession>();
// Normal properties.
private Long id;
private String username;
// Etc.. Of course with public getters+setters.
@Override
public boolean equals(Object other) {
return (other instanceof User) && (id != null) ? id.equals(((User) other).id) : (other == this);
}
@Override
public int hashCode() {
return (id != null) ? (this.getClass().hashCode() + id.hashCode()) : super.hashCode();
}
@Override
public void valueBound(HttpSessionBindingEvent event) {
HttpSession session = logins.remove(this);
if (session != null) {
session.invalidate();
}
logins.put(this, event.getSession());
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
logins.remove(this);
}
}
आप User
के लिए लॉग इन जब इस प्रकार है:
User user = userDAO.find(username, password);
if (user != null) {
request.getSession.setAttribute("user", user);
} else {
// Show error.
}
तो यह valueBound()
जो किसी भी पहले से logins
नक्शे से उपयोगकर्ता में लॉग इन निकाल देंगे आह्वान और सत्र रद्द करना होगा।
आप User
लॉगआउट जब इस प्रकार है:
request.getSession().removeAttribute("user");
या जब सत्र का समय समाप्त है, तो valueUnbound()
जो logins
नक्शे से उपयोगकर्ता को हटा सक्रिय किया जाएगा।
आपकी मदद करता है कि आप उपयोगकर्ता/सत्र डेटा पर नज़र रखने के लिए प्रयोग कर रहे हैं केंद्रीय भंडारण प्रणाली के कुछ प्रकार है? यदि ऐसा है, तो ये क्या है। – GrayWizardx
क्या आप स्प्रिंग सुरक्षा ढांचे का उपयोग कर रहे हैं? या आपने अपना खुद का कार्यान्वित किया है। क्या यह सवाल बंद है? – Ameya