JSP处理session与cookie研究三

定义一个session变量
session.setAttribute("user_name","joan");

读取一个session的值:
String your_name=session.getAttribute("user_name");

判断一个session是否存在应用:
if((String)session.getAttribute("user_id")==null)
{
out.print("yes");
}
else
{
out.print("no");
}


写入一个cookie的方法(要用三个语句):
Cookie thecookie=new Cookie("user_name",user_name);
thecookie.setMaxAge(60*60*24*365);
response.addCookie(thecookie);

读取一个cookie的值(JSP这个功能有点麻烦)
Cookie[] cookies = request.getCookies();

for (int i = 0; i < cookies.length; i++) {

Cookie c = cookies[i];
if(c.getName().equals("user_id"))
{
String aa=c.getValue();
out.print(aa);

}

}
Httpsession具有如下API:

  getId 此方法返回唯一的标识,这些标识为每个session而产生。当只有一个单一的值与一个session联合时,或当日志信息与先前的sessions有关时,它被当作键名用。

  GetCreationTime 返回session被创建的时间。最小单位为千分之一秒。为得到一个对打印输出很有用的值,可将此值传给Date constructor 或者GregorianCalendar的方法setTimeInMillis。

  GetLastAccessedTime 返回session最后被客户发送的时间。最小单位为千分之一秒。

  GetMaxInactiveInterval 返回总时间(秒),负值表示session永远不会超时。

  getAttribute 取一个session相联系的信息。(在jsp1.0中为 getValue)

  Integer item = (Integer) session.getAttrobute("item") //检索出session的值并转化为整型

  setAttribute 提供一个关键词和一个值。会替换掉任何以前的值。(在jsp1.0中为putValue)

  session.setAttribute("ItemValue", itemName); // ItemValue 必须不是must简单类型
5、Session对象

当用户登陆网站,系统将为他生成一个独一无二的Session对象,用以记录改用户的个人信息
,一旦改用户退出网站,那么该Session对象将会注销。Session对象可以绑定若干个人信息或
者Java对象,不同Session对象的同名变量是不会相互干扰的。

getValue(String name)、putValue(String name)、removeValue(String name)、getValueNames()
、getCreationTime()、getId()、getLastAccessedTime()、getMaxInactiveInterval()、
setMaxInactiveInterval()方法:
其中的getId()可以得到一次会话的sessionID值了!

OK,来看看如何通过JSP来写Cookie吧!


如何检查一个客户端是否支持COOKIE的方法:
用下面的方法写一个COOKIE到客户端,并确认成功
try
{
Cookie c = new Cookie("mycookie","COOKIE TEST");
response.addCookie(c);
}
catch(Exception e)
{
      System.out.println(e);
}


然后在一个新的JSP文件中:用下面的方法取客户端的COOKIE到cookies中, 如果cookies.length ==0,说明该客户端的浏览器不支持COOKIE
try
{
Cookie[] cookies = request.getCookies();
if(cookies.length ==0)
{
      System.out.println("not support cookie");
}
}
catch(Exception e)
{
      System.out.println(e);
}


使用这两个方法可以指示浏览器把Cookie返回给同一域内的其他服务器。注意域必须以点开始(例如.sitename.com),非国家类的域(如.com,.edu,.gov)必须包含两个点,国家类的域(如.com.cn,.edu.uk)必须包含三个点,一般地,Cookie只返回给与发送它的服务器名称完全相同的服务器。

  getMaxAge()/setMaxAge():获取/设置Cookie过期之前的时间,以秒计。如果不设置该值,则Cookie只在当前会话内有效,即在用户关闭浏览器之前有效,而且这些Cookie不会保存到磁盘上。

  getName()/setName():获取/设置Cookie的名称。本质上,名称和值是需要程序员始终关心的两个部分。由于HttpServletRequest的getCookies方法返回的是一个Cookie对象的数组,因此通常要用循环语句来访问这个数组并查找特定名称,然后用getValue()检查它的值。

  getPath()/setPath():获取/设置Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下的所有页面。这里的方法可以用来设定一些条件。例如,someCookie.setPath("/"),此时服务器上的所有页面都可以接收到该Cookie。

  getSecure()/setSecure():获取/设置一个boolean值,该值表示Cookie是否只能通过加密的连接(即SSL)发送。

  getValue()/setValue():获取/设置Cookie的值。如前所述,名称和值实际上是程序员始终关心的两个方面。不过也有一些例外情况,比如把名称作为逻辑标记(也就是说,如果该名称存在,则表示true)。

  getVersion()/setVersion():获取/设置Cookie所遵从的协议版本。默认版本0(遵从原先的Netscape规范);版本1遵从RFC 2109,但尚未得到广泛的支持。

1. 写入Cookie --- writecookie.jsp
-------------------------------------------------------------
<%@ page contentType="text/html; charset=ISO8859_1" %>
<%
  Cookie _cookie=new Cookie("user_delfancom", "delfan");
  _cookie.setMaxAge(30*60); // 设置Cookie的存活时间为30分钟
  response.addCookie(_cookie); // 写入客户端硬盘
  out.print("写Cookie完成");
%>

<%
  Cookie cookies[]=request.getCookies(); // 将适用目录下所有Cookie读入并存入cookies数组中
  Cookie sCookie=null;
  String sname=null;
  String name=null;
  if(cookies==null) // 如果没有任何cookie
    out.print("none any cookie");
  else
  {
    out.print(cookies.length + "<br>");
    for(int i=0;i<cookies.length; i++) // 循环列出所有可用的Cookie
    {
      sCookie=cookies[i];
      sname=sCookie.getName();
      name = sCookie.getValue();
      out.println(sname + "->" + name + "<br>");
    }
  }
%>

<html>
  <head>……(中间略)
  </head>
  <body>
  <table border=1>
  <tr><td>Name</td><td>value</td></tr>
  <%
  Cookie cookies[]=request.getCookies();
  Cookie sCookie=null;
  String svalue=null;
  String sname=null;
  for(int i=0;i<cookies.length;i++)
  {
  sCookie=cookies[i];
  svalue=sCookie.getValue();
  sname=sCookie.getName();
  %>
  <tr><td><%=sname%></td><td><%=svalue%></td></tr>
  <%
  }
  %>
  </table>……(其他内容)
  </body>
  </html>

[如何通过循环进行取出来cookie中的值]

<%
 Cookie myCookie[]=request.getCookies();//创建一个Cookie对象数组
 for(int n=0;n=cookie.length-1;i++);//设立一个循环,来访问Cookie对象数组的每一个元素
 Cookie newCookie= myCookie[n];
 if(newCookie.getName().equals("username")); //判断元素的值是否为username中的值
  {%>
   你好,<%=newCookie.getValue()%>!//如果找到后,向他问好
  <%}
%>

设置Cookie的存在时间,及删除Cookie 在JSP中,使用setMaxAge(int expiry)方法来设置Cookie的存在时间,参数expiry应是一个整数。正值表示cookie将在这么多秒以后失效。注意这个值是cookie将要存在的最大时间,而不是cookie现在的存在时间。负值表示当浏览器关闭时,Cookie将会被删除。零值则是要删除该Cookie。 如:   

<%
 Cookie deleteNewCookie=new Cookie("newcookie",null);
 deleteNewCookie.setMaxAge(0);
 deleteNewCookie.setPath("/");
 response.addCookie(deleteNewCookie);
%>


文章出处:DIY部落(http://www.diybl.com/course/3_program/java/javashl/20090306/158598.html)

你可能感兴趣的:(JSP处理session与cookie研究三)