2019独角兽企业重金招聘Python工程师标准>>>

cookie 技术:

cookie属性:

name: 名称
value:取值
path:路径(可选)
maxAge :生命周期,默认是一次回话
version:可选版本号
domain:域名(可选)
comment:备注(可选)

获取浏览器最后的访问时间:
代码:
 response.setContentType("text/html;charset=UTF-8");
 PrintWriter pw=response.getWriter();
 pw.write("您最后一次访问的时间为:<br/>");
 //获取浏览器全部cookie
 Cookie []cookie=request.getCookies();
 //遍历
 for(int i=0;cookie!=null&&i<cookie.length;i++){
  Cookie cook=cookie[i];
  if("lastAccessTime".equals(cook.getName())){
   //从浏览器上获取到的为字符串
   String value=cook.getValue();
   //将字符串解析为十进制
   Long time=Long.parseLong(value);
   //将毫秒值转化为日期
   Date d=new Date(time);
   //显示为设定格式的日期
   DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   String str=df.format(d);
   pw.write(str);
   break;
  }
 }
 //将第一次浏览的时间写入cookie,显示在浏览器上的必须是字符串
 Cookie c=new Cookie("lastAccessTime", System.currentTimeMillis()+"");
 response.addCookie(c);

关闭浏览器意味着一次回话结束,重新打开浏览器,第一次访问不会显示时间,第二次访问才会有时间。

清除cookie:
<a href='"+request.getContextPath()+"/servlet/TextCookie2'>清空</a>

TextCookie2的代码:
Cookie c=new Cookie("lastAccessTike", "");
c.setMaxAge(0);
response.addCookie(c);

服务器的去访问浏览器的cookie时,当服务器提供的路径不是以浏览器存放的cookie的路径开头时,
伪代码形式:服务器提供的路径.startWith(浏览器存放的cookie的路径)为false时,
则无法访问原来存放于浏览器的cookie。

c.setPath(request.getContextPath());//本应用都可以访问到该cookie

登录页面:
记住用户名功能:
表单页面:
//登录表单
String value="";
String checked="";
//获取包含所有的cookie的cookie数组
Cookie []c=request.getCookies();
for(int i=0;c!=null&&i<c.length;i++){
 Cookie cook=c[i];
 if("usernameinof".equals(cook.getName())){
  value=cook.getValue();
  checked="checked='checked'";
  break;
 }
}

response.setContentType("text/html;charset=UTF-8");
PrintWriter out =response.getWriter();
out.write("<form action='"+request.getContextPath()+"/servlet/TextCookie4' method='post'><br/>");
out.write("登录用户名:<input type='text' name='username' value='"+value+"'/><br/>");
out.write("密码:<input type='password' name='psw'/><br/>");
out.write("记住用户名:<input type='checkbox' name='remember' "+checked+"/> <br/>");
out.write("<input type='submit'  value='登录'/><br/>");
out.write("</form>");

cookie页面代码:
response.setContentType("text/html;charset=UTF-8");
PrintWriter out =response.getWriter();
//获取表单中的用户名密码和checkbox
String username=request.getParameter("username");
String password=request.getParameter("psw");
String remember=request.getParameter("remember");
//判断帐号和密码是否正确,这里用简单的反转判断
password=new StringBuffer(password).reverse().toString();
if(!username.equals(password)){
 out.write("请输入正确的帐号和密码,2秒后跳转到登录页面");
 //跳转到登录页面
 response.setHeader("Refresh", "2;URL="+request.getContextPath()+"/servlet/TextCookie3");
 return;
}

//将获取到的数据保存到cookie中
Cookie c=new Cookie("usernameinof", username);
c.setPath(request.getContextPath());
if(remember!=null){
 c.setMaxAge(Integer.MAX_VALUE);
}else{
 c.setMaxAge(0);
}
response.addCookie(c);
out.write("恭喜你,登录成功!");

记录浏览过的商品:

商品类Book描述:普通的描述
模拟数据库:

public class Bookdb {
 private static Map<String,Book> books=new HashMap<String, Book>();
 static{
  books.put("1", new Book("1", "玉女心经", "hehe"));
  books.put("2", new Book("2", "辟邪剑谱", "haha"));
  books.put("3", new Book("3", "葵花宝典", "xixi"));
 }
 //获取所有书籍的方法
 public static Map<String, Book> findAllBooks(){
  return books;
 }
 public static Book findBookbyid(String bookid){
  return books.get(bookid);
 }
}

主显示页:
public class ShowAllBooks extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   response.setContentType("text/html;charset=UTF-8");
   PrintWriter out=response.getWriter();
   out.write("<h1>所有的好书</h1>");
   Map<String, Book> m=Bookdb.findAllBooks();
   Set<Map.Entry<String, Book>> s =m.entrySet();
   //显示所有
   for(Map.Entry<String, Book> me:s){
    out.write(me.getValue().getName()+"<a href='"+request.getContextPath()+"/servlet/ShowBookDetal?bookid="+me.getKey()+"' target='_blank'>查看</a>"+"<br/>");
   }
   //将浏览过的显示出来
   out.write("您浏览过的书籍"+"<br/>");
   Cookie []cs=request.getCookies();
   for(int i=0;cs!=null&&i<cs.length;i++){
    Cookie c = cs[i];
    if("book".equals(c.getName())){
     String value = c.getValue();
     String ids[] =value.split("\\-");
     for(String id:ids){
      out.write(Bookdb.findBookbyid(id).getName()+"<br/>");
     }
     break;
    }
   }
 }

书详细描述显示页:
public class ShowBookDetal extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  /*       当前id       写入
   * 1 无cookie,       1       1
   * 2有cookie,但无book,   1       1
   * 3cookie为1     2       2-1
   * 4cookie为2-1     1       1-2
   * 5cookie为2-1     3       3-2-1
   * 6cookie为3-2-1    2       2-3-1
   * 7cookie为3-2-1    4       4-3-2
   */
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();
  //2显示商品的详细信息;
  out.write("详细内容:<br/>");
  String bookid = request.getParameter("bookid");
  Book book = Bookdb.findBookbyid(bookid);
  out.write(book.toString());
  //3写cookie:记住浏览历史记录
  String bookids = makeids(request,bookid);
  Cookie c = new Cookie("book", bookids);
  c.setMaxAge(Integer.MAX_VALUE);
  c.setPath(request.getContextPath());
  response.addCookie(c);
  
 }
 
 //组织写到cookie中的书籍的id。多个id之间用-分割。最多存3个
 /*
  客户端带过来的ID     当前看的书的ID    应该写回的ID
  1、一个cookie都木有     1       bookHistory=1
  2、有cookie,但没有bookHistory  1       bookHistory=1
  3、bookHistory=1     2       bookHistory=2-1
  4、bookHistory=2-1     1       bookHistory=1-2
  5、bookHistory=2-1     3       bookHistory=3-2-1
  6、bookHistory=1-2-3    2       bookHistory=2-1-3
  7、bookHistory=1-2-3    4       bookHistory=4-1-2
  */
 private String makeids(HttpServletRequest request, String bookid) {
  Cookie []cos=request.getCookies();
  //* 1 无cookie
  if(cos==null){
   return bookid;
  }
  //2有cookie,但无book,
  Cookie bookHistory =null;
  for(Cookie c:cos){
   if("book".equals(c.getName())){
    bookHistory=c;
    break;
   }
  }
  if(bookHistory==null){
   return bookid;
  }
  /*
   * 3cookie为1     2        2-1
   * 4cookie为2-1     1       1-2
   * 5cookie为2-1     3       3-2-1
   */
  //获取到浏览器传来的cookie
  String value=bookHistory.getValue();
  String []ids=value.split("\\-");
  LinkedList<String> list=new LinkedList<String>(Arrays.asList(ids));
 if(list.size()<3){
   //情况4
   if(list.contains(bookid)){
    list.remove(bookid);
   }  //情况5
    list.addFirst(bookid);
  }
  /*
   * 6cookie为3-2-1    2       2-3-1
   * 7cookie为3-2-1    4       4-3-2
   **/
  else{ 
   if(list.contains(bookid)){
    list.remove(bookid);
   }else{
    list.removeLast();
   }
   list.addFirst(bookid);
  }
  //2-3-1这样的形式
  StringBuffer sb=new StringBuffer();
  for(int i=0;i<list.size();i++){
   if(i>0){
    sb.append("-");
   }
   sb.append(list.get(i));
  }
  return sb.toString();
 }

转载于:https://my.oschina.net/u/1589656/blog/270416

cookie知识,小应用:记住用户名;记录用户浏览记录相关推荐

  1. Cookie实现记录用户浏览记录

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...

  2. ajax实现登录成功后设置cookie,使用jquery的cookie实现登录页记住用户名和密码的方法...

    对于初学者来说,登录页记住用户名和密码的功能是经常会遇到的(通常会用javaee的api去实现),今天为大家介绍在前端页面直接用jquery实现该功能(比传统的方法简单多了),长话短说直接进入正题: ...

  3. php记录上次观看记录,PHP 记录用户访问记录

    $id = $_GET['id']; $TempNum = 4;//cookie里面存储多少个浏览记录 if(isset($_COOKIE['RecentlyGoods']))//判断是否设置了COO ...

  4. python 按键记录器 密码记录 用户输入记录

    # -*- coding: utf-8 -*-from ctypes import byref, create_string_buffer, c_ulong, windll import python ...

  5. Django 处理用户浏览记录

    当用户点击某一个产品时就会有一个产品浏览记录,记录存进session 里,因为浏览记录是多条,所以session存的应该是个列表 # 判断是否登录,在登录状态下操作 if user:# 先取sessi ...

  6. JS使用实现记录客户浏览记录

    实现使用Cookie记录浏览记录的方式比较多,如使用jquery.cookie.js插件,这里使用js原生实现,当然当中也用到了jquery取值和遍历(就因为jQuery用着太方便了) <!DO ...

  7. 使用cookie保存用户的浏览记录

    我们在写关于用户对商品额的浏览记录的时候一般使用cookie进行记录,cookie一般保存字符串比较常用,如果想保存对象可以使用序列化,这里不做过多的解释,我们现在只做简单的cookie应用,cook ...

  8. java 的记住用户名和密码,JAVA--高级基础开发Cookie实现记住用户名和密码

    今天为大家分享关于 JAVA--高级基础开发Cookie实现记住用户名和密码 的文章 ,文章写的挺好的就转载过来了,希望能在大家的学习与工作中帮助到大家,下面我们一起来看看吧! 前端JSP页面: 实现 ...

  9. java记住用户名和密码_JAVA--高级基础开发Cookie实现记住用户名和密码

    前端JSP页面: 实现保存用户名和密码 Cookie // 用户名 String user = ""; // 登录密码 String pass = ""; // ...

最新文章

  1. 关于学习Python的一点学习总结(50->描述符)
  2. 纯国产敏捷项目管理软件,可基于scrum敏捷开发落地
  3. 【Python】Pycharm
  4. BugkuCTF-Misc:猜
  5. tf.gather( )的详细解析
  6. Maven 插件打包java 后台
  7. ES报错:Connection reset by peer 解决经历
  8. 10倍提升应用性能的10个建议
  9. Linux下启动、停止J2SE程序(脚本)
  10. Android心电图动画效果,手把手教你打造一个心电图效果View Android自定义View
  11. Java qq登录界面设计
  12. 高通MSM8937芯片参考资料免费下载
  13. 周易内核与计算机原理,周易原理之我说(一)
  14. 基于Office的开发-VBA
  15. python pyd 速度提升_pyd打包补充
  16. APS 与 MES 的区别是什么?
  17. MapWindow GIS二次开发
  18. 【阅读笔记】《Catching Both Gray and Black Swans: Open-set Supervised Anomaly Detection》
  19. 统计学之大数定律、小数法则
  20. 什么是隐性知识?显性知识?

热门文章

  1. mysql 联合主键_Mysql 创建联合主键
  2. 跨域访问的相关概念及解决方法
  3. 卸载 Visual Studio 2005步骤
  4. 832计算机组成原理和数据结构,考试科目832计算机组成原理和数据结构.doc
  5. putty 登陆Linux 标签栏显示当前ip
  6. signature=efaf25d07c6ea03d7552906c0caee5a8,幼児の認知発達における関係把握の問題
  7. JDBC未设置socket超时导致应用程序的线程池阻塞
  8. short类型占16位,可以赋给short类型的最大值32767,最小值为-32768
  9. 如何修改服务器上的端口号,如何修改远程服务器端口号
  10. frp ---- golang编写的内网穿透工具简介