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的毫秒数