Avatar billede speder Nybegynder
27. marts 2003 - 15:16 Der er 4 kommentarer og
1 løsning

Se alle sessions

Hej

Jeg kan godt finde ud at at læse en session som jeg kender navnet på, men er det muligt at liste alle sessions i JSP? Et lille kodeeksempel ville være herligt.

M.v.h.

Søren
Avatar billede disky Nybegynder
27. marts 2003 - 15:30 #1
Jeg har ikke prøvet at lave det, men kig evt. på:
HttpSessionListener

Hvis den kan du detektere når en session bliver oprettet eller nedlagt,

Søg evt. på www.javasoft.com i deres forum, der finder du super god hjælp.
Avatar billede disky Nybegynder
27. marts 2003 - 15:36 #2
kig f.eks. her:
http://forum.java.sun.com/thread.jsp?forum=33&thread=283671

Du kan forresten ikke umiddelbart fra en session se de andre.
Men du kan overvåge hvilke der bliver oprettet og nedlagt via ovenstående, og så styrer det derigennem.
Avatar billede arne_v Ekspert
27. marts 2003 - 17:27 #3
Der er noget rimeligt godt materiale på:
  http://www.stardeveloper.com/articles/display.html?article=2001112001&page=1

Eksemplet tæller kun op, men se.getSession() vil give session objektet som
du så kan bruge.

Husk:
  - virker kun application wide ikke server wide
  - virker kun servlet 2.3 og nyere
Avatar billede soelvpil Nybegynder
31. marts 2003 - 21:05 #4
Du laver følgende klasse:

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class AllSessionsListener implements HttpSessionListener {


public void sessionCreated(HttpSessionEvent se) {
  HttpSession session = se.getSession();
  Collection sessions = getAllSessions(session.getServletContext());
  sessions.add(session);
}

public void sessionDestroyed(HttpSessionEvent se) {
  HttpSession session = se.getSession();
  Collection col = getAllSessions(session.getServletContext());
  col.remove(session);
}

private synchronized Collection getAllSessions(ServletContext sc) {
  Object all = sc.getAttribute("AllSessions");
  if (all!=null) {
    return (Collection) all;
  }
  else {
    Collection col = new HashSet();
    sc.setAttribute("AllSessions",col);
    return col;
  }
}

}

Herefter tilføjer du følgende til din web.xml

<listener>
  <listener-class>AllSessionsListener</listener-class>
</listener>

Så vil din server sørge for at kalde metoderne hver gang en session oprettes eller nedlægges.

Nu kan du fra servletcontexten få fat i alle sessioner.

Fra en servlet:

Collection allSessions =
  (Collection)this.getServletContext().getAttribute("AllSessions");

Fra en jsp-side skriver du i toppen:

<jsp:useBean id="AllSessions" class="AllSessionsListener" scope="application" />

og kan herefter i resten af siden blot referere til variablen AllSessions.
Avatar billede soelvpil Nybegynder
31. marts 2003 - 21:08 #5
p.s. : LAD VÆRE med at gemme referencer til sessionerne andre steder end i denne Collection, ellers risikerer du et gevaldigt sikkerhedshul.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester