??????? 这几天做ORACLE IAS10g的天气预报,由于在定制时无法使用Servlet(也可能是本人水平有限),在传参数据中使用了session,其实以前也经常用,不过以前一点问题都出现过,可这次还时有时无,可能和PORTLET有关。索兴将资料和休会记录下来:
??????? session是一种灵活、轻便的机制,它使在页面上的状态编程成为可能。HTTP是一种无状态协议,每当用户发出请求时,服务器就做出响应,客户端就做响应,客户端与服务器之间的联系是离散的、非连续的。当用户在同一网站多页面间转换时,根本无法知道是否同一个客户,SESSION就可解决这个问题。当一个客户在多个页面间切换时,服务器会保存用户的信息。
?????? 在服务器上,通过为在站点上的用户创建一个会话对象保存,用户的信息。当用户第一次访问站点时,分配给用户一个会话对象和一个单独的会活ID,并且ID是惟一的。在接下来的请求中,会话ID标识用户,会对象做为请求的一部分发送给Servlet,Servlet能从会话对象中读取信息、或者添加信息。
?? Cookie是一小块可以嵌入HTTP请求和响应的数据。它在服务器上产生,并作为响应头域的一部分返回给客户。浏览器在收到有Cookie的响应后,会把Cookie的内容以“关键字/值”的形式写入到一个专为存放Cookie的文本文件中。浏览器会把Cookie的信息与请求发送给服务器,这样服务器可以再次读取数据。Cookie可以对有效期进行设置,浏览器不会把过期的Cookie发送给服务器。
??????? JSP使用一个叫HttpSession的对象实现同样的功能。Session的信息保存在服务器端,Session的id保存在客户机的cookie中。如果客户机禁止cookie,Session Id就必须带在url后面。Session一般在服务器上设置了一个30分钟的过期时间,当客户停止活动后自动失效。Session 中保存和检索的信息不能是基本数据类型(primitivedatatypes)如(int, double)等,而必须是java的相应的object(对象)如(Integer,Double)。
HttpSessionsession=request.getSession();//得到一个session对象或创建一个
session.getId()//得到sessionID数
Integerid=(Integer)session.getValue(“id“)//检索出session的值并转化为整型 session.putValue(“ItemValue,itemName);//ItemValue必须不是must简单类型
???????? 我测试Session时用的:
//测试session??
//??? out.println("SessionID in Request:" + request.getRequestedSessionId());
//??? out.println("
");
//??? out.println("SessionID in Cookie:" + request.isRequestedSessionIdFromCookie());
//??? out.println("
");
//??? out.println("SessionID in URL:" + request.isRequestedSessionIdFromURL());
//??? out.println("
");
//??? out.println("SessionID Valid:" + request.isRequestedSessionIdValid());
//??? out.println("
");
//??? out.println("SessionID New:" + session.isNew());
//??? out.println("
");
//??? out.println("SessionID:" + session.getId());
//??? out.println("
");