ALLE Sessions auslesen

Masterpurzel

Mitglied
Hallo,

habe eine einfache Frage zu der ich leider nichts finden konnte:

Wie kann man alle aktiven Sessions auslesen mit JSP oder JSF? Brauche das für eine Online-Statistik!

Danke

Gruß Masterpurzel
 
Hallo,

dazu gibt es AFAIK kein Standard API... man könnte sich natürlich selbst etwas auf Basis eines HttpSessionListener bauen, aber ich denke dies ist in diesem Fall nicht zweckdienlich...

Welchen Servlet-Container verwendest du denn? in der Regel gibt es dort App-Server spezifische Möglichkeiten die Http-Sessions aufzulisten und auf Session-Attribute zuzugreifen.

Bei Tomcat kann man die Session Informationen relativ einfach über die internen Management JMX MBeans auslesen.

Schau mal hier:
(für das Beispiel habe ich beim start einer Session ein Attribut mit einem generierten "UserName" hinzugefügt)
Java:
package de.tutorials.web.training;

import java.io.IOException;

public class GetSessionInfoServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		PrintWriter out = resp.getWriter();
		
		try {
			MBeanServer pmbs = ManagementFactory.getPlatformMBeanServer();
			ObjectName on = new ObjectName("Catalina:type=Manager,context=" + req.getContextPath() + ",host=localhost");
						
			out.println("ActiveSessions: "+ pmbs.getAttribute(on, "activeSessions"));
			
			String[] sessionIds = pmbs.invoke(on, "listSessionIds", new Object[0], new String[0]).toString().split(" ");
			out.println(Arrays.toString(sessionIds)); 
			
			for(String sessionId : sessionIds){
				out.println("Session: " + sessionId +" UserName: " + pmbs.invoke(on, "getSessionAttribute", new Object[]{sessionId, "UserName"}, new String[]{String.class.getName(),String.class.getName()}));
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Ausgabe:
Code:
ActiveSessions: 2
[E4D4EFE02B846271CBB67DB21016AFE7, 0E1072BC82581645210DD1D61520A452]
Session: E4D4EFE02B846271CBB67DB21016AFE7 UserName: User_1328308664892
Session: 0E1072BC82581645210DD1D61520A452 UserName: User_1328308652756

Gruß Tom
 
Ich habe da so ein paar Probleme:

das wichtigste zuerst: lokal funktioniert es, auf meinem entferntem Server nicht mehr, es wird immer nur "0" angezeigt!

Was kann ich dagegen tun?

PS: Tomcat zeigt mir auch immer nur "0" an :(
 
Zuletzt bearbeitet:
Hallo,

eventuell musst du hier einen anderen Host als Attribut im ObjectName verwenden:
Java:
...
ObjectName on = new ObjectName("Catalina:type=Manager,context=" + req.getContextPath() + ",host=localhost"); 
...

Welche Tomcat Version verwendest du denn? Getestet habe ich das mit Tomcat Version 7.0.23

Gruß Tom
 
Hallo,

eventuell musst du hier einen anderen Host als Attribut im ObjectName verwenden:
Java:
...
ObjectName on = new ObjectName("Catalina:type=Manager,context=" + req.getContextPath() + ",host=localhost"); 
...

Welche Tomcat Version verwendest du denn? Getestet habe ich das mit Tomcat Version 7.0.23

Gruß Tom

Ich habe auch die 7er Version, das Attribut hatte ich schon geändert - auf den Wert der in server.xml unter config steht. Ging auch nicht. Was ich noch anmerken muss:

lokal lade ich es per Webinterface von Tomcat hoch (.war). Online lade ich es per sftp hoch. Kanns daran liegen?


€dit:
meine Verzeichnisse sehen so aus:


.war
-tomcat
+-webapps
-+-pcpowerplay
--+-...alle daten sind hier drin!

sftp
-tomcat
+-webapps
-+-pcpowerplay
--+-ROOT
---+-...alle daten sind hier drin!
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück