【Session】session把id号存在cookie中、session的URL重写把id加载URL上、购物车(关闭浏览器、禁用cookie)
2014-04-30 12:22
639 查看
1、session的默认存放时间是30分钟
session的时间可以在web.xml中配置
2、关闭浏览器仍然可以找到session
session把id号存在cookie中,存储在浏览器的内存中,关闭浏览器,cookie销毁。
我们可以设置cookie的有效时间,这样即使关闭浏览器,用户还可以带着id找到session。
第一次访问会创建两个cookie,session自己创建的cookie放在内存中,程序创建的放在本地硬盘
重启浏览器,浏览器带着cookie来找session,session还是原来的session
3、如果浏览器禁用cookie,那么可以使用URL重写的方式通过URL带着id。
再就是重定向的URL重写是这样子的:
4、使用session实现购物车功能
ListBookServlet
关闭浏览器,购物车的东西还在,禁用cookie,也可以实现购物车功能。
session的时间可以在web.xml中配置
<session-config> <session-timeout>60</session-timeout> </session-config>可以采用代码的方式摧毁session
session.invalidate()
2、关闭浏览器仍然可以找到session
session把id号存在cookie中,存储在浏览器的内存中,关闭浏览器,cookie销毁。
我们可以设置cookie的有效时间,这样即使关闭浏览器,用户还可以带着id找到session。
package com.xiaozhi.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class SessionDemo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { HttpSession session = request.getSession(); session.setAttribute("name", "洗衣机"); //获取session的id将其保存在cookie中30分钟 String id = session.getId(); Cookie cookie = new Cookie("JSESSIONID", id); cookie.setMaxAge(30 * 60); cookie.setPath("/HelloJavaWeb"); response.addCookie(cookie); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { super.doPost(req, resp); } }
第一次访问会创建两个cookie,session自己创建的cookie放在内存中,程序创建的放在本地硬盘
重启浏览器,浏览器带着cookie来找session,session还是原来的session
3、如果浏览器禁用cookie,那么可以使用URL重写的方式通过URL带着id。
package com.xiaozhi.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class SessionDemo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { HttpSession session = request.getSession(); session.setAttribute("name", "洗衣机"); String url1=response.encodeURL("/HelloJavaWeb/servlet/BuyServlet"); String url2=response.encodeURL("/HelloJavaWeb/servlet/PayServlet"); response.getWriter().write("<a href="+url1+">buy</a>"); response.getWriter().write("<a href="+url2+">pay</a>"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { super.doPost(req, resp); } }
再就是重定向的URL重写是这样子的:
response.encodeRedirectURL(
4、使用session实现购物车功能
ListBookServlet
package com.xiaozhi.controller; import java.io.IOException; import java.io.PrintWriter; import java.io.Serializable; import java.util.LinkedHashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //首页,列出所有书 public class ListBookServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //先得到Session才能对URL编码 request.getSession(); out.print("本站有如下商品<br/>"); Map <String,Book>map=Db.getAll(); for(Map.Entry<String, Book> entry:map.entrySet()){ Book book=entry.getValue(); //URL编码 String url=response.encodeURL(request.getContextPath()+"/servlet/BuyServlet?id="+book.getId()); String str="<a target=\"_blank\" href='"+url+"'>"+book.getName()+"购买"+"</a><br/>"; out.print(str); } } } class Db{ private static Map<String,Book> map=new LinkedHashMap<String,Book>(); static { map.put("1", new Book("1","JavaWeb开发","老k","一本好书")); map.put("2", new Book("2","jdbc开发","老张","一本好书")); map.put("3", new Book("3","spring开发","老li","一本好书")); map.put("4", new Book("4","struts开发","老张","一本好书")); map.put("5", new Book("5","android开发","老bi","一本好书")); } public static Map getAll(){ return map; } } class Book implements Serializable{ private String id; private String name; private String author; private String description; public Book() { super(); } public Book(String id, String name, String author, String description) { this.id = id; this.name = name; this.author = author; this.description = description; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }BuyServlet
package com.xiaozhi.controller; import java.io.IOException; import java.io.PrintWriter; import java.util.LinkedList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class BuyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String id=request.getParameter("id"); Book book=(Book)Db.getAll().get(id); HttpSession session=request.getSession(false); //关闭浏览器仍然能访问到数据 String cookieId = session.getId(); Cookie cookie = new Cookie("JSESSIONID", cookieId); cookie.setMaxAge(30 * 60); cookie.setPath("/HelloJavaWeb"); response.addCookie(cookie); //从session中得到用户购买的商品集合 List <Book> list=(List)session.getAttribute("list"); if(list==null){ list=new LinkedList<Book>(); session.setAttribute("list", list); } list.add(book); String url=response.encodeRedirectURL(request.getContextPath()+"/servlet/ListCartServlet"); response.sendRedirect(url); } }ListCartServlet
package com.xiaozhi.controller; import java.io.IOException; import java.io.PrintWriter; import java.util.List; 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 ListCartServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); HttpSession session=request.getSession(false); if(session==null){ out.write("您没 4000 有购买任何商品"); return; } List<Book> list=(List) session.getAttribute("list"); out.write("你购买了如下商品"+"<br/>"); for(Book book:list){ out.write(book.getName()+"<br/>"); } } }
关闭浏览器,购物车的东西还在,禁用cookie,也可以实现购物车功能。
相关文章推荐
- 用户浏览器禁用了cookie,SessionID如何传递
- 关闭浏览器,和浏览器禁用cookie时Session处理的方法
- 用户浏览器禁用了cookie,SessionID如何传递
- URL重写 浏览器禁用cookie后使用session的方法
- 客户端禁用cookie后 通过url传替session_id
- jsp中使用URL重写跟踪Session,浏览器不支持Cookie的解决方案
- php 禁用cookie,还能使用session,url重写
- 浏览器禁用cookie后php如何保持session会话-use_trans_sid机制
- 浏览器禁用cookie后,怎么使用session
- Session,Cookie,jsessionid和Url重写
- 浏览器禁用cookie后,怎么使用session,求解决方案
- 浏览器禁用cookie后php如何保持session会话-use_trans_sid机制
- 如果用户将浏览器的cookie禁用,问session还能使用吗?为什么?如何解决?
- session依赖cookie,如果浏览器禁用了cookie呢?
- 在禁用Cookie的浏览器中使用Session
- 浏览器禁用cookie后,怎么使用session,求解决方案
- Session,Cookie,jsessionid和Url重写
- 当浏览器的cookie被禁用了,怎么使用session
- URL重写——在禁用Cookie的情况下使用Session
- PHP---浏览器禁用cookie后如何使用session