JSP Cookie的使用
Cookie是在Client端留下的信息,一般新增一个Cookie是使用如下的方式
Cookie ck = new Cookie(索引值, 数据内容);
response.addCookie(ck);
而Cookie的取出,则是使用如下的方式
Cookie ck[] = request.getCookies();
int i;
for(i=0;i<ck.length;i++) {
out.print("ck.name="+ck[i].getName());
out.print(" value=" + ck[i].getValue()+"<BR>");
Cookie.getName() 便是取得当时Cookie存入时的 索引值
Cookie.getValue() 便是取得当时Cookie存入时的 资料内容
而Cookie的取出没有他法,全都只能使用以下方式,把所有Cookie都读出
Cookie ck[] = request.getCookies();
而Cookie的生命周期有多长,是由Cookie 名称.setMaxAge(秒数)来设定,如果没有设定之,则Cookie会在Browser结束掉时结束。如果设定秒数=3600,代表该Cookie可以由设定的时间算起,活3600秒(1小时),就算Browser结束掉后再进来,只要在一小时之内,都可以读取到该Data。但若设为0,代表要删除该Cookie。
Cookie是server传送给浏览器一段信息(都是文字,且中间不能有空白),浏览器收到cookie后会将其储存起来,之后每次读取这部server上的网页时,就根据一些规则把以前收到cookie传给server。但Cookie使用
上需依赖client是否有接受cookie的设定限制。传送到客户端的Cookie对象,可不限一个,如果有多个Cookie
对象要传送的话,可以连续执行addCookie(),把所有的Cookie都加至response对象,一次将所有Cookie都送至对方的浏览器内。
Cookie可以透过c.setMaxAge()函式来设定有效时间,如果c.setMaxAge()内的参数是一个正整数值,则单位就是以秒来计算,数值越大则Cookie对象的有效的时间越久,若参数值为0,则表示Cookie物件存放在浏览器后将立即失效,若参数为负整数值时,则当浏览器被关闭后,此此Cookie对象也马上失效。然而,若两个不同的网站都使用Cookie,而索引值也相同,但内容不同时,后面网站的设定会OverWrite前面网站的设定吗?答案是不会,我们可以在Window的根目录(如:C:\Windows或C:\WinNt )下找一个Cookies的Directory,该Directory内的数据便是Cookies存放的地方,不同的网站会把Cookies存在不同的File之中,所以没有这OverWrite的问题。
Cookie.jsp
<HTML>
<HEAD>
<TITLE>
Jsp2
</TITLE>
</HEAD>
<BODY>
<%
Cookie ck = new Cookie("cww2","test2!!");
ck.setMaxAge(65536);
response.addCookie(ck);
%>
</BODY>
</HTML>
GetCookie 之范例
<HTML>
<HEAD>
<TITLE>
getcookie
</TITLE>
</HEAD>
<BODY>
<H1>
JBuilder Generated JSP
</H1>
<%
Cookie ck[] = request.getCookies();
int i;
for(i=0;i<ck.length;i++) {
out.print("ck.name="+ck[i].getName());
out.print(" value=" + ck[i].getValue()+"<BR>");
}
%>
ok
</BODY>
Session是某段时间内一连串客户端与伺服端的talking,这联机会一直持续到某个时间后,不再向
Web要求.jsp网页时才结束(即timeout)或者使用session.invalidate()。一个session可能包含一个使用者
的多个请求(request)。
因为http不具有状态,所以若需要保持使用状态,就需要cookie或session。但是session可能会timeout,
而cookie可能被disable,所以有时得用隐藏字段来做事情。
每一个客户端都对应着一个session对象用来存放与这个客户端相关的交易数据,而存放在这个
session对象内的数据,可以是复杂的对象型态,并非单纯的文字。
通常在JSP程序中,不需要特别写任何程序就可取用session对象,但也可在JSP程序中加入
<%@ page session=“true”%>,表示session功能已启动,若设为false时,代表要关闭session功能。
session.isNew()是一boolean
若传回值为true,代表为第一次被建立使用,若为false则代表为正在被使用中。
session.getMaxInactiveInterval() 此一函式是用来读取此一session的有效期限。
session.setMaxInactiveInterval(1800) 表示设定session的有效期限,参数型态为整数,单位为秒。
session.getAttribute(String name) 取得指定索引键中的值,参数型态为字符串,表索引键名,
传回值为一object型态,必须透过转型才能转换成正确的类别型态。
session.putAttribute(String name,Object Value)
session的存放格式如cookie一样,是为“索引值(key)=值(value)” ,但存入值的型态为对象
型态,第一参数为索引键,第二为要存入session的对象。
session.removeAttribute(String name)
移除session对象中不需再使用的索引键,参数为字符串型态,代表要移除的索引键。
session.getId() 取得session的识别信息
session.getValueNames() 传回所有存放在session对象中的索引键名
session.invalidate() 中断session
session.getLastAccessedTime() 传回long表示离1970/1/1 00:00:00最后access的毫秒数
session.getCreationTime() 回long表示离1970/1/1 00:00:00 create的毫秒数