1. import java.util.HashMap;
  2. import java.util.Map;
  3. import java.util.concurrent.ConcurrentHashMap;
  4. import java.util.concurrent.atomic.AtomicInteger;
  5. public class SessionCookieValidator {
  6. private static final int MAX_REQUESTS_PER_MINUTE = 100; // Rate limit
  7. private static final Map<String, AtomicInteger> requestCounts = new ConcurrentHashMap<>(); // Track requests per host
  8. private static final Map<String, Long> lastRequestTimes = new ConcurrentHashMap<>(); // Track last request time
  9. public static boolean validateSessionCookie(String requestHost, String sessionCookie) {
  10. // Get current time
  11. long currentTime = System.currentTimeMillis();
  12. // Check rate limit
  13. if (requestCounts.containsKey(requestHost)) {
  14. long lastTime = lastRequestTimes.get(requestHost);
  15. if (lastTime != null && currentTime - lastTime < 60000) { // 60000ms = 1 minute
  16. // Rate limit exceeded
  17. return false;
  18. }
  19. }
  20. // Update request count and last request time
  21. requestCounts.computeIfAbsent(requestHost, k -> new AtomicInteger(0)).incrementAndGet();
  22. lastRequestTimes.put(requestHost, currentTime);
  23. // Validate session cookie (replace with your actual validation logic)
  24. if (sessionCookie == null || sessionCookie.isEmpty()) {
  25. return false; // Invalid cookie
  26. }
  27. // Example validation: Check for specific attributes or expiration
  28. if (!sessionCookie.contains("valid_session")) {
  29. return false; // Invalid cookie format
  30. }
  31. // Reset request count after a certain time (e.g., 1 minute)
  32. // This can be done periodically in a separate thread.
  33. // For simplicity, we don't do it here.
  34. return true; // Cookie is valid
  35. }
  36. public static void main(String[] args) {
  37. // Example Usage
  38. String host = "staging.example.com";
  39. String cookie1 = "valid_session=true;other=value";
  40. String cookie2 = null;
  41. String cookie3 = "invalid_session";
  42. System.out.println("Cookie 1 is valid: " + validateSessionCookie(host, cookie1)); // Expected: true
  43. System.out.println("Cookie 2 is valid: " + validateSessionCookie(host, cookie2)); // Expected: false
  44. System.out.println("Cookie 3 is valid: " + validateSessionCookie(host, cookie3)); // Expected: false
  45. // Simulate rate limiting
  46. for (int i = 0; i < MAX_REQUESTS_PER_MINUTE + 5; i++) {
  47. System.out.println("Request " + (i + 1) + ": " + validateSessionCookie(host, cookie1));
  48. }
  49. }
  50. }

Add your comment