小弟我刚刚开始学习JSP今天遇到关于cookie的一个问题,搞的我很郁闷
请看下我的两端代码
cookie1.jsp:
<%!
String name=null;
String value=null;
String label="";
%>
<%
if (request.getCookies()!=null)
{
Cookie[] cookies=request.getCookies();
for(int i=0;i<cookies.length;i++)
{
Cookie ce=cookies[i];
name=ce.getName();
if ("user".equals(name))
{value=ce.getValue();
label="您好, "+value+"!";
}
}
}
%>
<%= label %>
<a href="cookie2.jsp">cookie2</a>
-----------------------------------------------------------------------------------
cookie2.jsp:
<%
Cookie newcookie=new Cookie("usa1","hejin");
newcookie.setMaxAge(-1);
response.addCookie(newcookie);
%>
<a href="cookie1.jsp">cookie1.jsp</a>
----------------------------------------------------------------------------------
调试时我先打开浏览器然后打开cookie1.jsp网页上没出现cookie中的内容(这是正常的),然后我在点击连接进入cookie2.jsp(生成cookie),接着再点击连接回到cookie1.jsp如愿以偿的显示出来cookie里的内容(现在都一切正常)。
可是当我关闭浏览起然后再打开浏览器打开cookie1.jsp时还是能读取cookie里的内容,这是为什么啊?
我在新建cookie的时候已经用了这个语句“newcookie.setMaxAge(-1);”了啊!为什么关了浏览器再打开COOKIE还存在啊?
请看下我的两端代码
cookie1.jsp:
<%!
String name=null;
String value=null;
String label="";
%>
<%
if (request.getCookies()!=null)
{
Cookie[] cookies=request.getCookies();
for(int i=0;i<cookies.length;i++)
{
Cookie ce=cookies[i];
name=ce.getName();
if ("user".equals(name))
{value=ce.getValue();
label="您好, "+value+"!";
}
}
}
%>
<%= label %>
<a href="cookie2.jsp">cookie2</a>
-----------------------------------------------------------------------------------
cookie2.jsp:
<%
Cookie newcookie=new Cookie("usa1","hejin");
newcookie.setMaxAge(-1);
response.addCookie(newcookie);
%>
<a href="cookie1.jsp">cookie1.jsp</a>
----------------------------------------------------------------------------------
调试时我先打开浏览器然后打开cookie1.jsp网页上没出现cookie中的内容(这是正常的),然后我在点击连接进入cookie2.jsp(生成cookie),接着再点击连接回到cookie1.jsp如愿以偿的显示出来cookie里的内容(现在都一切正常)。
可是当我关闭浏览起然后再打开浏览器打开cookie1.jsp时还是能读取cookie里的内容,这是为什么啊?
我在新建cookie的时候已经用了这个语句“newcookie.setMaxAge(-1);”了啊!为什么关了浏览器再打开COOKIE还存在啊?
改正如下:
<%
Cookie newcookie=new Cookie("user","hejin");
newcookie.setMaxAge(-1);
response.addCookie(newcookie);
%>
<a href="cookie1.jsp">cookie1.jsp</a>
注意这个:
<%!
String name=null;
String value=null;
String label="";
%>
这3个值被定义成了页面级变量。
在你第二次返回cookie1.jsp时,因为request.getCookies()有值,于是
name赋值为"user",label赋值为="您好, hejin!";value赋值为"hejin",
但关闭浏览器后,cookie消失,访问cookie1.jsp时,因为request.getCookies()无值,所以3个变量的值未变。当然你的<%= label %>输出也不变了。
将这3个变量定义方式改变一下即可:
<%
String name=null;
String value=null;
String label="";
%>
另外,尽量不要以<%! %>的方式定义变量,这常常会导致不可知的错误。