Session and Cookies 2
转载自: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 botherThere are no race conditions when multiple different?users access the page simultaneouslyOn the face of it, it seems practically impossible for the?same user to access the session concurrentlyThe rise of Ajax makes synchronization?mportantWith Ajax calls, it is actually quite likely that two?requests from the same user could arrive concurrentlyPerformance tipDon’t do “synchronized(this)”!Use the session or perhaps the value from the session as?the label of the synchronized block?
? ? ? HttpSession Methods:
getAttributeExtracts a previously stored value from a session object.?Returns null if no value is associated with given name.
setAttributeimplement HttpSessionBindingListener.
removeAttributegetId
Returns the unique identifier.
isNew
Determines if session is new to client (not to page)
Gets or sets the amount of time session should go without?access before being invalidated
invalidateUse 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("<HEAD><TITLE>Current Shopping Cart Items</TITLE></HEAD>"); out.println("<BODY>"); // 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:<BR>"); if (items == null) { out.println("<B>None</B>"); } else { out.println("<UL>"); for (int i = 0; i < items.length; i++) { out.println("<LI>" + items[i]); } out.println("</UL>"); } // Ask if they want to add more items or check out. out.println("<FORM ACTION="/servlet/ShoppingCart" METHOD=POST>"); out.println("Would you like to<BR>"); out.println("<INPUT TYPE=SUBMIT VALUE=" Add More Items ">"); out.println("<INPUT TYPE=SUBMIT VALUE=" Check Out ">"); out.println("</FORM>"); // Offer a help page. out.println("For help, click <A HREF="/servlet/Help" + "?topic=ShoppingCartViewerCookie">here</A>"); out.println("</BODY></HTML>"); } private static String generateSessionId() throws UnsupportedEncodingException { String uid = new java.rmi.server.UID().toString(); // guaranteed unique return URLEncoder.encode(uid,"UTF-8"); // encode any special chars } private static String[] getItemsFromCart(String sessionid) { return new String[]{"a","b"}; }}
?