用Java完成以下要求!前提只使用一个Cookie!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Java完成以下要求!前提只使用一个Cookie!相关的知识,希望对你有一定的参考价值。
完成一个网银登陆时的提示,
xx您好!您是xx次登陆!
您上次的登陆时间是:
yyyy/mm/dd hh:mm:ss
具体如下图!
会的朋友帮帮忙 最好把这个小项目发给我 在线等
200分送上!!
谢谢合作!
不需要连接数据库 仅是一个小练习
JSP javascript 会用的都行
只要完成
200分不算多
cookie.setMaxAge(600);
设置600秒生存期,如果设置为负值的话,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效。
cookie.setPath("/test/test2");
设置Cookie路径,不设置的话为当前路径(对于Servlet来说为request.getContextPath() + web.xml里配置的该Servlet的url-pattern路径部分)
response.addCookie(cookie);
2.读取Cookie
该方法可以读取当前路径以及“直接父路径”的所有Cookie对象,如果没有任何Cookie的话,则返回null
Cookie[] cookies = request.getCookies();
3.删除Cookie
Cookie cookie = new Cookie("key", null);
cookie.setMaxAge(0);
设置为0为立即删除该Cookie
cookie.setPath("/test/test2");
删除指定路径上的Cookie,不设置该路径,默认为删除当前路径Cookie
response.addCookie(cookie);
4.注意:假设路径结构如下
test/test2/test345/test555/test666
a.相同键名的Cookie(值可以相同或不同)可以存在于不同的路径下。
b. 删除时,如果当前路径下没有键为"key"的Cookie,则查询全部父路径,检索到就执行删除操作(每次只能删除一个与自己最近的父路径Cookie)
FF.必须指定与设定cookie时使用的相同路径来删除改cookie,而且cookie的键名不论大写、小写或大小混合都要指定路径。
IE.键名小写时,如果当前路径为/test/test2,如果找不到再向上查询/test、/test555、/test345,如果还找不到就查询/ 。(/test555/test666不查询)
键名大小写混合或大写时,不指定路径则默认删除当前路径,并且不向上查询。
c.读取Cookie时只能读取直接父路径的Cookie。
如果当前路径为/test/test2,要读取的键为"key"。当前路径读取后,还要读取/test,/test读取后,还要读取/
d.在做Java的web项目时,由于一般的Web服务器(如Tomcat或Jetty)都用Context来管理不同的Web Application,这样对于每个Context有不同的Path,
在一个Server中有多个Web Application时要特别小心,不要设置Path为/的Cookie,容易误操作。(当然前提是域名相同)
参考资料:http://www.examda.com/Java/jichu/20071012/102035971.html
参考技术A 1,设置Cookie路径,不设置的话为当前路径(对于Servlet来说为request.getContextPath() + web.xml里配置的该Servlet的url-pattern路径部分)response.addCookie(cookie);
2.读取Cookie
该方法可以读取当前路径以及“直接父路径”的所有Cookie对象,如果没有任何Cookie的话,则返回null
Cookie[] cookies = request.getCookies();
3.删除Cookie
Cookie cookie = new Cookie("key", null);
cookie.setMaxAge(0);
设置为0为立即删除该Cookie
cookie.setPath("/test/test2");
删除指定路径上的Cookie,不设置该路径,默认为删除当前路径Cookie
response.addCookie(cookie);
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
Date d=new Date();
Format formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Cookie cookie = null;
boolean cookieBool = true;
String username=getname();//你自己取得用户名的方法
Cookie[] cookies = request.getCookies();
if(null!=cookies)
for (int i = 0; i < cookies.length; i++)
cookie = cookies;
if(username.equals(cookie.getName()))
String logincount=cookie.getValue().split(",")[0];
String time = cookie.getValue().split(",")[1];
int count = Integer.parseInt(logincount)+1;
cookie.setValue(count+","+formatter.format(d));
cookie.setMaxAge(60*60*24);//有效时间为一天
response.addCookie(cookie);
out.println("你是第"+count+"次登录");
out.println("上次登录时间:");
out.println(time);
cookieBool = false;
break;
if(cookieBool)
String s=formatter.format(d);
cookie = new Cookie(username,"1"+","+s);
cookie.setMaxAge(60*60*24);
response.addCookie(cookie);本回答被提问者采纳 参考技术B 在这个例子中我们要创建一个存储访问者名字的 cookie。当访问者首次访问网站时,他们会被要求填写姓名。名字会存储于 cookie 中。当访问者再次访问网站时,他们就会收到欢迎词。
首先,我们会创建一个可在 cookie 变量中存储访问者姓名的函数:
function setCookie(c_name,value,expiredays)
var exdate=new Date()
exdate.setDate(exdate.getDate()+expiredays)
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
上面这个函数中的参数存有 cookie 的名称、值以及过期天数。
在上面的函数中,我们首先将天数转换为有效的日期,然后,我们将 cookie 名称、值及其过期日期存入 document.cookie 对象。
之后,我们要创建另一个函数来检查是否已设置 cookie:
function getCookie(c_name)
if (document.cookie.length>0)
c_start=document.cookie.indexOf(c_name + "=")
if (c_start!=-1)
c_start=c_start + c_name.length+1
c_end=document.cookie.indexOf(";",c_start)
if (c_end==-1) c_end=document.cookie.length
return unescape(document.cookie.substring(c_start,c_end))
return ""
上面的函数首先会检查 document.cookie 对象中是否存有 cookie。假如 document.cookie 对象存有某些 cookie,那么会继续检查我们指定的 cookie 是否已储存。如果找到了我们要的 cookie,就返回值,否则返回空字符串。
最后,我们要创建一个函数,这个函数的作用是:如果 cookie 已设置,则显示欢迎词,否则显示提示框来要求用户输入名字。
function checkCookie()
username=getCookie('username')
if (username!=null && username!="")
alert('Welcome again '+username+'!')
else
username=prompt('Please enter your name:',"")
if (username!=null && username!="")
setCookie('username',username,365)
完整代码
<html>
<head>
<script type="text/javascript">
function getCookie(c_name)
if (document.cookie.length>0)
c_start=document.cookie.indexOf(c_name + "=")
if (c_start!=-1)
c_start=c_start + c_name.length+1
c_end=document.cookie.indexOf(";",c_start)
if (c_end==-1) c_end=document.cookie.length
return unescape(document.cookie.substring(c_start,c_end))
return ""
function setCookie(c_name,value,expiredays)
var exdate=new Date()
exdate.setDate(exdate.getDate()+expiredays)
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
function checkCookie()
username=getCookie('username')
if (username!=null && username!="")
alert('再次欢迎! '+username+'!')
else
username=prompt('请输入姓名:',"")
if (username!=null && username!="")
setCookie('username',username,365)
</script>
</head>
<body onLoad="checkCookie()">
</body>
</html>
你可以自己再改改 参考技术C 两个文件:
index.jsp:
<%@page language="java" autoFlush="true" contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<style type="text/css">
input
font-family:'Verdana';
</style>
</head>
<body>
<form name="login" action="welcome.jsp">
<table>
<tr>
<td>
用户名:
</td>
<td>
<input type="text"name="name">
</td>
</tr>
<tr>
<td>
密 码:
</td>
<td>
<input type="password" name="password">
</td>
</tr>
</table>
<input type="submit" value="submit">
</form>
</body>
</html>
welcome.jsp:
<%@page contentType="text/html" import="java.text.SimpleDateFormat, java.util.Date;" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%! String name, password;
int loginTime;
String lastTime;
%>
<%
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd ' ' HH:mm:ss ");
name = request.getParameter("name");
password = request.getParameter("password");
request.getSession().setAttribute("name", name);
Cookie[] cookies = request.getCookies();
loginTime = 1;
String[] values;
for (int i = 0; i < cookies.length; i++)
if (cookies[i].getName().equals("loginTime"))
values = cookies[i].getValue().split("ABC");
if (Integer.parseInt(values[0]) >= 0)
loginTime = Integer.parseInt(values[0]);
lastTime = values[1];
loginTime++;
Cookie cookie = new Cookie("loginTime", new Integer(loginTime).toString() + "ABC" + format.format(new Date()));
cookie.setMaxAge(24 * 60 * 60);
response.addCookie(cookie);
if (loginTime <= 1)
loginTime = 1;
lastTime = format.format(new Date());
%>
</body>
<table width="200">
<tr>
<td>
<hr>
</td>
</tr>
<tr>
<td>
尊敬的<font color="red"><%=name%></font>先生:
</td>
</tr>
<tr>
<td>
</td>
</tr>
<tr>
<td>
这是你第<font color="red"><%=loginTime%></font>次登陆网上银行
</td>
</tr>
<tr>
<td>
你上次登陆的时间是:
</td>
</tr>
<tr>
<td>
<font color="red"><%=lastTime%></font>
</td>
</tr>
</table>
</html>
最近刚学,不过上面代码有Bug,就是刷新浏览器会增加登陆次数,关键的问题就在于那个天价cookie的地方,这个必须在用户退出的登录的时候才能加,不然刷新就会重复添加了。
我是菜鸟错了楼主别见怪啊! 参考技术D 手头没环境,直接写的servlet的doget方法,不保证正确
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
Date d=new Date();
Format formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Cookie cookie = null;
boolean cookieBool = true;
String username=getname();//你自己取得用户名的方法
Cookie[] cookies = request.getCookies();
if(null!=cookies)
for (int i = 0; i < cookies.length; i++)
cookie = cookies;
if(username.equals(cookie.getName()))
String logincount=cookie.getValue().split(",")[0];
String time = cookie.getValue().split(",")[1];
int count = Integer.parseInt(logincount)+1;
cookie.setValue(count+","+formatter.format(d));
cookie.setMaxAge(60*60*24);//有效时间为一天
response.addCookie(cookie);
out.println("你是第"+count+"次登录");
out.println("上次登录时间:");
out.println(time);
cookieBool = false;
break;
if(cookieBool)
String s=formatter.format(d);
cookie = new Cookie(username,"1"+","+s);
cookie.setMaxAge(60*60*24);
response.addCookie(cookie);
out.println("你好!你是第1次登录我们的网站");
怎么用java获取cookie
ookie实际上是一个存在你硬盘里的数据,但是这些数据很特殊,只能由web应用提交给浏览器帮助存储,并且我们还能读取浏览器存在本地的cookieweb应用一般只在cookie中存储一些用户信息等少量且暂时的数据,数据量大则不适合存储在cookies
ava通过httpServletRequest接口来访问浏览器请求中的cookies数据(这里先了解一下cookies来龙去脉,代码待会一并给出)
每个cookie有两个属性:键 ,值(无特定格式字符串,所以可以diy存数据,不过要注意URL编码问题,编码问题待会和代码一同讲)
如果我们需要存储新的cookie我们可以new一个cookie实例 并通过httpservletRsponse提交到浏览器,进而存储到本地 参考技术A 1.获取Cookie的值:获取Cookie值的标准代码格为:myCookie.Values["auth"];
上句代码可以获取名为myCookie的Cookie对象键名为auth的键值。如果不存在,则返回null。
DateTime now=new DateTime.Now;
Response.Cookies["Info"].Expires = DateTime.Now.AddDays(1);
//设定Cookie过期时间下面的代码示例演示删除应用程序中所有可用 Cookie 的一种方法
2.代码如下:
HttpCookie aCookie;
string cookieName;
int limit = Request.Cookies.Count;
for (int i = 0; i < limit; i++)
cookieName = Request.Cookies[i].Name;
aCookie = new HttpCookie(cookieName);
aCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(aCookie);
请采纳,谢谢本回答被提问者采纳
以上是关于用Java完成以下要求!前提只使用一个Cookie!的主要内容,如果未能解决你的问题,请参考以下文章
jmeter如何设置登录接口只调用一次以及遇到的问题:cookie参数放在消息头headers里面?