cookie知识,小应用:记住用户名;记录用户浏览记录
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知识,小应用:记住用户名;记录用户浏览记录相关推荐
- Cookie实现记录用户浏览记录
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...
- ajax实现登录成功后设置cookie,使用jquery的cookie实现登录页记住用户名和密码的方法...
对于初学者来说,登录页记住用户名和密码的功能是经常会遇到的(通常会用javaee的api去实现),今天为大家介绍在前端页面直接用jquery实现该功能(比传统的方法简单多了),长话短说直接进入正题: ...
- php记录上次观看记录,PHP 记录用户访问记录
$id = $_GET['id']; $TempNum = 4;//cookie里面存储多少个浏览记录 if(isset($_COOKIE['RecentlyGoods']))//判断是否设置了COO ...
- python 按键记录器 密码记录 用户输入记录
# -*- coding: utf-8 -*-from ctypes import byref, create_string_buffer, c_ulong, windll import python ...
- Django 处理用户浏览记录
当用户点击某一个产品时就会有一个产品浏览记录,记录存进session 里,因为浏览记录是多条,所以session存的应该是个列表 # 判断是否登录,在登录状态下操作 if user:# 先取sessi ...
- JS使用实现记录客户浏览记录
实现使用Cookie记录浏览记录的方式比较多,如使用jquery.cookie.js插件,这里使用js原生实现,当然当中也用到了jquery取值和遍历(就因为jQuery用着太方便了) <!DO ...
- 使用cookie保存用户的浏览记录
我们在写关于用户对商品额的浏览记录的时候一般使用cookie进行记录,cookie一般保存字符串比较常用,如果想保存对象可以使用序列化,这里不做过多的解释,我们现在只做简单的cookie应用,cook ...
- java 的记住用户名和密码,JAVA--高级基础开发Cookie实现记住用户名和密码
今天为大家分享关于 JAVA--高级基础开发Cookie实现记住用户名和密码 的文章 ,文章写的挺好的就转载过来了,希望能在大家的学习与工作中帮助到大家,下面我们一起来看看吧! 前端JSP页面: 实现 ...
- java记住用户名和密码_JAVA--高级基础开发Cookie实现记住用户名和密码
前端JSP页面: 实现保存用户名和密码 Cookie // 用户名 String user = ""; // 登录密码 String pass = ""; // ...
最新文章
- 关于学习Python的一点学习总结(50->描述符)
- 纯国产敏捷项目管理软件,可基于scrum敏捷开发落地
- 【Python】Pycharm
- BugkuCTF-Misc:猜
- tf.gather( )的详细解析
- Maven 插件打包java 后台
- ES报错:Connection reset by peer 解决经历
- 10倍提升应用性能的10个建议
- Linux下启动、停止J2SE程序(脚本)
- Android心电图动画效果,手把手教你打造一个心电图效果View Android自定义View
- Java qq登录界面设计
- 高通MSM8937芯片参考资料免费下载
- 周易内核与计算机原理,周易原理之我说(一)
- 基于Office的开发-VBA
- python pyd 速度提升_pyd打包补充
- APS 与 MES 的区别是什么?
- MapWindow GIS二次开发
- 【阅读笔记】《Catching Both Gray and Black Swans: Open-set Supervised Anomaly Detection》
- 统计学之大数定律、小数法则
- 什么是隐性知识?显性知识?
热门文章
- mysql 联合主键_Mysql 创建联合主键
- 跨域访问的相关概念及解决方法
- 卸载 Visual Studio 2005步骤
- 832计算机组成原理和数据结构,考试科目832计算机组成原理和数据结构.doc
- putty 登陆Linux 标签栏显示当前ip
- signature=efaf25d07c6ea03d7552906c0caee5a8,幼児の認知発達における関係把握の問題
- JDBC未设置socket超时导致应用程序的线程池阻塞
- short类型占16位,可以赋给short类型的最大值32767,最小值为-32768
- 如何修改服务器上的端口号,如何修改远程服务器端口号
- frp ---- golang编写的内网穿透工具简介