Session and Cookies 2
程序员文章站
2022-06-10 11:47:00
...
转载自: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
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("<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"};
}
}
推荐阅读
-
实战 J2EE 开发购物网站 - 创建数据库
-
Outlook邮件中的网页链接无法打开的2种解决办法
-
flex2破解pptv聚力HD会员电影图文教程(亲测成功)
-
p2p种子搜索器无法连入emule网络解决方法汇总
-
后起之秀乐视云盘bt/磁力链/ed2k离线下载功能使用教程
-
雷神911 s2g笔记本怎么样? 雷神911 s2g评测
-
卸载VS2011 Developer Preview后Sql Server2008 R2建立数据库关系图报“找不到指定的模块”错误的解决方法
-
ASP.NET Web Api 2实现多文件打包并下载文件的实例
-
解读ASP.NET 5 & MVC6系列教程(2):初识项目
-
MySQL 自动备份与数据库被破坏后的恢复方法第1/2页