F
frageUMantwort
Gast
Hallo miteinander.
Ich möchte gerne eine Session zerstören. Dafür habe ich ein kleines Beispiel erstellt:
// index.jsp
// Session wird gesetzt ( aufruf siehe index.jsp )
und das Servlet Remove:
Gut, nun wenn die Session gesetzt wird (im TestServlet) und dann anschliessend im RemoveServlet die Session zerstöre. Wird sie auch Erfolgreich "zerstört" allerdings kann der User z. B im Browser die Seite zuvor wieder auswähle ( zrück gehen ). Ich gehe mal stark davon aus der der Browser dann auf den Cache zugreift und deshalb mir nicht anzeigt das die Session zerstört ist. Sobald man die Seite aktualisiert oder wieder auf die Verlinkung zu RemoveServlet geht, wird auch korrekt angezeigt, dass die Session zerstört wird. Weil ja wieder eine Anfrage geschickt wird.
Meine frage ist nun:
Dieses Beispiel soll nur zum Verständniss sein, damit ich dann die Möglichkeit kenne wie man so eine Session (die über Servlets gesetzt wurde) zerstört.
Wird in der Praxis dann mehr auf JSP gesetzt und dort die Session gesetzt?
Gruß
Ich möchte gerne eine Session zerstören. Dafür habe ich ein kleines Beispiel erstellt:
// index.jsp
HTML:
<%--
Document : index
Created on : 21.07.2011, 10:29:38
Author : Administrator
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Beispiel</title>
</head>
<body>
<a href="/BeispielSession/test">Session setzen</a><br>
</body>
</html>
// Session wird gesetzt ( aufruf siehe index.jsp )
Java:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class Test extends HttpServlet {
public static HttpSession session = null;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
response.addHeader("Pragma:", "no-cache");
response.addHeader("Pragma:", "no-store");
if(session == null){
session = request.getSession(true);
}
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet Test </title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet Test "+ session.getId() +" </h1>");
out.println("<a href=\"/BeispielSession/remove\">remove session</a><br>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
und das Servlet Remove:
Java:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Remove extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
response.addHeader("Pragma:", "no-cache");
response.addHeader("Pragma:", "no-store");
response.addHeader("Expires:", new Date().toGMTString());
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet Remove</title>");
out.println("</head>");
out.println("<body>");
if(Test.session != null)
out.println("<h1>Remove Session: " + Test.session.getId() + "</h1>");
else
out.println("<h1>Session zerstört</h1>");
out.println("</body>");
out.println("</html>");
Test.session.invalidate();
Test.session = null;
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
Gut, nun wenn die Session gesetzt wird (im TestServlet) und dann anschliessend im RemoveServlet die Session zerstöre. Wird sie auch Erfolgreich "zerstört" allerdings kann der User z. B im Browser die Seite zuvor wieder auswähle ( zrück gehen ). Ich gehe mal stark davon aus der der Browser dann auf den Cache zugreift und deshalb mir nicht anzeigt das die Session zerstört ist. Sobald man die Seite aktualisiert oder wieder auf die Verlinkung zu RemoveServlet geht, wird auch korrekt angezeigt, dass die Session zerstört wird. Weil ja wieder eine Anfrage geschickt wird.
Meine frage ist nun:
- Wie kann ich dafür sorgen, dass er nicht auf dem Cache zugreift, wenn der User im Browser wieder zurückgeht?
- Oder wie macht man es in der Praxis? z. B bei Logout, das der User nicht zurück gehen kann und das Formular zuvor doch noch sehen kann?
Dieses Beispiel soll nur zum Verständniss sein, damit ich dann die Möglichkeit kenne wie man so eine Session (die über Servlets gesetzt wurde) zerstört.
Wird in der Praxis dann mehr auf JSP gesetzt und dort die Session gesetzt?
Gruß