Dear Friends, Tomcat is using ManagerBase generateSessionId() to generate session Id. But I want a generation mechnism where each sessionId will be unique in whole tomcat. Right now it is unique in a single context. But I want uniqueness will be among all context running under the tomcat. How can I do that (In a easieast way)??
Still now I have written a class which has extended the org.apache.session.standardManager class. Then I have changed the code slightly. But I don't know whether any sideeffect will be there or not?? Please look on my code---------------------------------------------------------------- package com.myproject.session; import java.util.HashSet; import java.util.Set; import org.apache.catalina.Session; import org.apache.catalina.session.StandardManager; public class MySessionManager extends StandardManager { public static Set<String> unquieSessionIdset = new HashSet<String>(); @Override public void remove(Session session) { unquieSessionIdset.remove(session.getIdInternal()); super.remove(session); } @Override protected synchronized String generateSessionId() { byte random[] = new byte[16]; String jvmRoute = getJvmRoute(); String result = null; // Render the result as a String of hexadecimal digits StringBuffer buffer = new StringBuffer(); do { int resultLenBytes = 0; if (result != null) { buffer = new StringBuffer(); duplicates++; } while (resultLenBytes < this.sessionIdLength) { getRandomBytes(random); random = getDigest().digest(random); for (int j = 0; j < random.length && resultLenBytes < this.sessionIdLength; j++) { byte b1 = (byte) ((random[j] & 0xf0) >> 4); byte b2 = (byte) (random[j] & 0x0f); if (b1 < 10) buffer.append((char) ('0' + b1)); else buffer.append((char) ('A' + (b1 - 10))); if (b2 < 10) buffer.append((char) ('0' + b2)); else buffer.append((char) ('A' + (b2 - 10))); resultLenBytes++; } } if (jvmRoute != null) { buffer.append('.').append(jvmRoute); } result = buffer.toString(); } while (sessions.containsKey(result) || !unquieSessionIdset.add(result)); return (result); } } Can You please tell me whether it will have any other problem or not?? Or can you give any alternative solution?? Actually I kept the existing code. With that I addeda a static set. And I am keeping the generated session in set also. While generating Id I am trying to add that to set. if successfully added then I will return that key. Thanks Arnab Ghosh