- 浏览: 9370 次
- 性别:
- 来自: 广州
最近访客 更多访客>>
文章分类
- 全部博客 (10)
- ExtJS Spring3 Struts2 Hibernate3 Annotation (1)
- servlet (2)
- myeclipse8.6 Servlet JSP 模板 (1)
- response request (1)
- Android (1)
- Cookie Session (1)
- JSP include (1)
- JSP Servlet XML (0)
- JSP Serlvet (0)
- Tag (0)
- Tag SimpleTag (1)
- exe4j jar exe (0)
- EL表达式 国际化 (0)
- EL表达式 国际化 在线支付 (0)
- mysql (1)
- JDBC (0)
- Servlet过滤器 Servlet监听 (0)
- Servlet JSP JDBC (0)
- java (0)
最新评论
-
zone8089653:
请教lz 在https下request.getCookies( ...
Cookie&Session -
han_zw:
,很实用,收录一下了。
Servlet(一)
首页(显示用户上次访问的时间)
response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.write("您上次访问时间是:"); //1.获取用户上次访问的时间,显示 Cookie cookies[] = request.getCookies(); for(int i=0;cookies!=null && i<cookies.length;i++){ Cookie cookie = cookies[i]; if(cookie.getName().equals("lastAccessTime")){ long time = Long.parseLong(cookie.getValue()); Date date = new Date(time); out.write(DateFormat.getDateInstance(DateFormat.FULL).format(date)); } } //2.把本次的时间以cookie的形式回写给客户机 (lastAccessTime) Cookie cookie = new Cookie("lastAccessTime",System.currentTimeMillis()+""); response.addCookie(cookie);
- 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
- 一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
- 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
- 如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
- 注意,删除cookie时,path必须一致,否则不会删除
显示用户上次浏览过的商品
public class CookieDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); //1.显示网站所有商品 out.print("本网站有如下书籍:<br/>"); Map<String,Book> map = DB.getMap(); for(Map.Entry<String, Book> entry : map.entrySet()){ Book book = entry.getValue(); out.print("<a href='/com/servlet/CookieDemo2?id="+book.getId()+"' target='_blank'>"+book.getName()+"</a><br/>"); } out.print("您曾经看过如下商品:<br/>"); //2.显示用户曾经浏览过的商品 // bookHistory Cookie cookie = null; Cookie cookies[] = request.getCookies(); for(int i=0;cookies!=null && i<cookies.length;i++){ if(cookies[i].getName().equals("bookHistory")){ cookie = cookies[i]; } } if(cookie!=null){ //找到了bookHistory这个cookie String bookHistory = cookie.getValue(); //4_6_1 String ids[] = bookHistory.split("\\_"); for(String id: ids){ Book book = (Book) DB.getMap().get(id); out.print(book.getName() + "<br/>"); } } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } class DB{ private static Map<String,Book> map = new HashMap<String, Book>(); static{ map.put("1", new Book("1","图书1","张三")); map.put("2", new Book("2","图书2","李四")); map.put("3", new Book("3","图书3","王五")); map.put("4", new Book("4","图书4","赵六")); map.put("5", new Book("5","图书5","韩七")); } public static Map<String, Book> getMap(){ return map; } } class Book{ private String id; private String name; private String author; public Book() { super(); // TODO Auto-generated constructor stub } public Book(String id, String name, String author) { super(); this.id = id; this.name = name; this.author = author; } 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 class CookieDemo3 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
//1.根据用户带过来的id值,显示相应商品的信息
out.print("您想看的书的详细信息为:<br/>");
String id = request.getParameter("id");
Book book = (Book) DB.getMap().get(id);
out.print(book.getId() + "<br/>");
out.print(book.getName() + "<br/>");
out.print(book.getAuthor() + "<br/>");
//2.以cookie的形式回写该商品的id号给浏览器
String bookHistory = makeCookie(book.getId(),request);
Cookie cookie = new Cookie("bookHistory",bookHistory);
cookie.setMaxAge(10000);
response.addCookie(cookie);
}
//根据用户原来看过的书,以及现在看的书的id,构建新的cookie值
private String makeCookie(String id, HttpServletRequest request) {
//bookHistory=null 3 bookHistory=3
//bookHistory=2_1_5 3 bookHistory=3_2_1
//bookHistory=2 3 bookHistory=3_2
//bookHistory=2_3 3 bookHistory=3_2
//1.得到用户曾经看过的书
String bookHistory = null;
Cookie cookies[] = request.getCookies();
for(int i=0;cookies!=null && i<cookies.length;i++){
if(cookies[i].getName().equals("bookHistory")){
bookHistory = cookies[i].getValue();
}
}
if(bookHistory==null){
bookHistory = id;
return bookHistory;
}
//bookHistory=1_2_5 代表用户曾经看一些书,接着程序要得到用户曾经看过什么书
String ids[] = bookHistory.split("_");
//为了检测数组中是否包含当前id,我们应该把数据转成集合,并且还要转成链表结构的集合
LinkedList<String> idList = new LinkedList(Arrays.asList(ids));
/*if(idList.contains(id)){
//bookHistory=2_3 3 bookHistory=3_2
idList.remove(id);
idList.addFirst(id);
}else{
//bookHistory=2_1_5 3 bookHistory=3_2_1
if(idList.size()>=3){
idList.removeLast();
idList.addFirst(id);
}else{
//bookHistory=2 3 bookHistory=3_2
idList.addFirst(id);
}
}*/
if(idList.contains(id)){
idList.remove(id);
}else{
if(idList.size()>=3){
idList.removeLast();
}
}
idList.addFirst(id);
StringBuffer sb = new StringBuffer();
for(String lid: idList){ //1_2_3_
sb.append(lid + "_");
}
return sb.deleteCharAt(sb.length()-1).toString();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
数据指纹(MD5:32|64)
public static String md5(String plainText) { try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(plainText.getBytes()); byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) i += 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } System.out.println("result: " + buf.toString());// 32位的加密 return buf.toString(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } }
class TokenProcessor{ //1. 把构造方法私有 //2. 自己产生一个类的对象 //3. 定义一个方法返回上面产生的对象 private TokenProcessor(){}; public static final TokenProcessor instance = new TokenProcessor(); public static TokenProcessor getInstance(){ return instance; } public String generateToken(){ //3843849384 9849238402840243802 983434 String token = System.currentTimeMillis() + "" + new Random().nextInt(99999999); //数据指纹 数据摘要 md5 try { MessageDigest md = MessageDigest.getInstance("md5"); byte md5[] = md.digest(token.getBytes()); //128位 16【12,23,34,544543543543,】 //base64编码 SABDSSDSD BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(md5); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } }
防止表单重复提交
<form action="/com/servlet/FormSubmitServlet" method="post" onsubmit="return dosubmit()"> 用户名:<input type="text" name="username"><br/> <input id="submit" type="submit" value="提交"> </form>
function dosubmit(){ document.getElementById("submit").disabled = 'disabled'; return true; }
response.setContentType("text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); String token = TokenProcessor.getInstance().generateToken(); request.getSession().setAttribute("token", token); out.print("<form action='/com/servlet/FormSubmitServlet' method='post'>"); out.print("<input type='hidden' name='token' value='"+token+"'>"); out.print("<input type='text' name='username'>"); out.print("<input type='submit' value='提交'>"); out.print("</form>");
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { boolean b = isToken(request); if(!b){ //用户带过来的令牌无效,阻止提交 System.out.println("你是重复提交!!"); return; } //用户带过来的令牌有效,处理提交 request.getSession().removeAttribute("token"); String username = request.getParameter("username"); //把用户提交的数据保存到数据库中 System.out.println("处理提交请求,把" + username + "保存到数库中!!"); } //判断用户带过来的令牌是否有效 private synchronized boolean isToken(HttpServletRequest request) { String client_token = request.getParameter("token"); if(client_token==null){ return false; } String server_token = (String) request.getSession().getAttribute("token"); if(server_token==null){ return false; } if(!client_token.equals(server_token)){ return false; } return true; }
相关推荐
在IT行业中,尤其是在Web开发领域,Cookie和Session是两种非常重要的技术,用于管理用户状态和保持会话。这里我们深入探讨这两个概念以及它们在Java Web中的应用。 首先,Cookie是客户端存储的小型文本文件,由...
### Day09_cookie & Session:详解Cookie与Session的用法及生命周期 在现代Web开发中,维护用户状态是一项至关重要的任务。Cookie与Session是实现这一目标的两种主要机制。本文将深入探讨这两种技术的工作原理、...
在"Cookie&Session&Cache"这个压缩包中,可能包含了针对这三种技术的封装库,提供了方便的API来简化开发中的操作,如创建、读取、更新和删除Cookie、Session和Cache的功能。这些库通常会提供错误处理机制,确保数据...
在Web开发中,Cookie和Session是两种非常重要的技术,用于管理用户会话状态。它们都是用来跟踪用户身份和保持用户信息的方式,但有着不同的工作原理和应用场景。在本教程“day16_cookie&session”中,我们将深入探讨...
Cookie&Session笔记.md
知识点一:会话的基本概念 会话是指在Web应用中,一个客户端(通常为浏览器)与Web服务器之间连续发生的一系列请求和响应的过程。例如,用户在一个网站上...以上就是对“cookie&session.pdf”文件中知识点的详细解析。
此资源是我的博客11_JavaWeb——Cookie&Session中的案例资源,关于比较难以编写的工具类我已在博客中给出,下载此资源后可直接运行,实现登录注册功能。其中登录功能能够记住用户使得下次登录不需要重复输入用户名和...
新手实用,内容详细,内含cookie以及session的定义,价值,使用的方法...
在Web开发中,Cookie和Session是两种非常重要的用户身份验证和会话管理技术。它们都是用来跟踪用户状态,尤其是在无状态的HTTP协议下保持用户登录状态的关键手段。下面将详细介绍Cookie和Session的工作原理、用途...
cookie和session缓存技术的思维导图,结构清晰,便于初学者阅读
在Web开发中,Cookie和Session是两种非常重要的用户会话管理技术。它们主要用来跟踪用户的状态,以便在多个页面间保持用户的登录信息或其他个性化设置。本文将深入探讨这两种技术及其在JavaEE企业全栈开发中的应用。...
Cookie 和 Session 在 JSP 中的应用 在 Web 开发中,会话技术是非常重要的一部分。它可以使得不同的请求之间实现数据共享,从而提高用户体验和开发效率。本文将详细介绍 Cookie 和 Session 在 JSP 中的应用,包括...
在IT行业中,尤其是在Web开发领域,Cookie、Session和Cache是三种非常重要的概念,它们用于管理用户状态、提高网站性能和优化用户体验。以下是对这些概念的详细解释,以及如何在C#中进行操作。 1. **Cookie**: ...
【知识点详解】 1. **Cookie的基本概念** - Cookie是由服务器端生成,发送到客户端(浏览器)的一小块数据,用于存储用户...正确地创建、读取和更新Cookie,以及结合Session使用,能够提升用户体验并保证数据安全。
在Web开发中,Cookie和Session是两种非常重要的用户身份验证和会话管理机制。它们用于在客户端(浏览器)和服务器之间存储和交换信息,确保用户在浏览网站时能够保持登录状态,实现个性化设置等。 首先,让我们详细...
在Web开发中,Cookie和Session是两种常见的用户身份验证机制,尤其在C#编程语言中,它们被广泛用于实现登录功能。本实例将探讨如何在C#环境下利用Cookie和Session来处理用户登录状态。 首先,我们要理解Cookie和...
一,Session:含义:有始有终的一系列动作\消息1,隐含了“面向连接”和“保持状态”两种含义2,一种用来...http协议本来是无状态的,所以引进了cookie和session机制来保持连接状态 cookie与session机制之间的区别与
### Cookie、Session与Token的区别及使用详解 #### 一、Cookie **定义**: Cookie是一种用于在客户端保持状态的方案。简单来说,当你访问一个网站时,该网站可能会在你的计算机上留下一些信息(如用户名、密码等),...