Session and Cookies 2
程序员文章站
2022-05-11 22:59:16
...
转载自: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("<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"};
}
}
上一篇: 跨域获取cookie的办法
下一篇: cookies提取
推荐阅读
-
网络直播:挨踢项目求生法则(2)战略篇
-
Oracle11gR2构建RAC之(2)--配置共享存储
-
php验证session无效的解决方法,php验证session
-
Android学习笔记(Android Studio) 4-2-1~2 Fragment详解(一、二)(不可不会的Activity和Fragment)
-
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用_php实例
-
小论成长方法(rev 2)
-
抖音信息流广告怎么投放(分享这2种投放方法)
-
最好用的koa2+mysql的RESTful API脚手架,mvc架构,支持node调试,pm2部署。
-
FileNotFoundError: [Errno 2] No such file or directory: ‘errors.out‘ (python自然语言处理 5.6 最后的示例报错)
-
android-camera2相机开发-9-使用opengl实现LUT滤镜