转载自:http://www.java-programming.info/tutorial/pdf/csajsp2/08-Session-Tracking.pdf
http://www.java2s.com/Code/Java/Servlets/Usecookietosavesessiondata.htm
Session Tracking
HttpSession session = request.getSession();
synchronized(session) {
SomeClass value =
(SomeClass)session.getAttribute("someID");
if (value == null) {
value = new SomeClass(...);
}
doSomethingWith(value);
session.setAttribute("someID", value);
}
- The J2EE blueprints say not to bother
- There are no race conditions when multiple different users access the page simultaneously
- On the face of it, it seems practically impossible for the same user to access the session concurrently
- The rise of Ajax makes synchronization mportant
- With Ajax calls, it is actually quite likely that two requests from the same user could arrive concurrently
- Performance tip
- Don’t do “synchronized(this)”!
- Use the session or perhaps the value from the session as the label of the synchronized block
- Don’t do “synchronized(this)”!
HttpSession Methods:
- getAttribute
Extracts a previously stored value from a session object. Returns null if no value is associated with given name.
- setAttribute
Associates a value with a name. Monitor changes: valuesimplement HttpSessionBindingListener.
- removeAttribute
Removes values associated with name. - getAttributeNames
Returns names of all attributes in the session. -
getId
Returns the unique identifier. -
isNew
Determines if session is new to client (not to page) - getCreationTime
Returns time at which session was first created - getLastAccessedTime
Returns time at which session was last sent from client - getMaxInactiveInterval, setMaxInactiveInterval
Gets or sets the amount of time session should go without access before being invalidated
- invalidate
Invalidates current session
Use cookie to save session data:
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShoppingCartViewerCookie extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
String sessionid = null;
Cookie[] cookies = req.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("sessionid")) {
sessionid = cookies[i].getValue();
break;
}
}
}
// If the session ID wasn't sent, generate one.
// Then be sure to send it to the client with the response.
if (sessionid == null) {
sessionid = generateSessionId();
Cookie c = new Cookie("sessionid", sessionid);
res.addCookie(c);
}
out.println("Current Shopping Cart Items ");
out.println("");
// Cart items are associated with the session ID
String[] items = getItemsFromCart(sessionid);
// Print the current cart items.
out.println("You currently have the following items in your cart:
");
if (items == null) {
out.println("None");
} else {
out.println("");
for (int i = 0; i < items.length; i++) {
out.println("- " + items[i]);
}
out.println("
");
}
// Ask if they want to add more items or check out.
out.println("");
// Offer a help page.
out.println("For help, click here");
out.println("