Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。注意 会话状态仅在支持 cookie 的浏览器中保留。
(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
基本语法
编辑
1,对于
值类型的变量,Session中保存的是值类型的
拷贝
Session["__test0"] = 1;
int i = (int)Session["__test0"]+1;
int j = (int)Session["__test0"];
结果:i=2,j=1
2,对于引用类型的变量,Session中保存的是引用
CDACommon cda = new CDACommon();
Session["__test"] = cda.GetDataSet("select top 1 * from tb_customer");
DataSet ds = (DataSet)Session["__test"];
DataSet ds2 = (DataSet)Session["__test"];
ds.Tables[0].Rows[0][0]="9999";
结果:
ds.Tables[0].Rows[0][0]=="9999"
ds2.Tables[0].Rows[0][0]=="9999";
3,Session周期
新的浏览器窗口启动后,开始一个新的Session,触发Global的Session_Start的调用,从第一个浏览器窗口打开的浏览器窗口不启动新的Session。Session过期后,执行页面的提交也会触发Session_Start,等于是新的一个Session。
4,调用Session
对于Web Service,每个方法的调用都会启动一个Session,可以用下面的方法来使多个调用在同一个Session里 CWSSyscfg cwsCfg = new CWSSyscfg(); cwsCfg.CookieContainer = new System Net.CookieContainer(); CWSSyscfg是一个Web Service类,Web Service的给代理类设置CookieContainer属性,只要多个代理的CookieContainer属性是相同的值,则对这些Web Service的调用在同一个Session。可以用单例模式来实现。
5,Session数据有效期
只要页面有提交活动,则Session的所有项都会保持,页面在20分钟(默认配置)内没有任何提交活动时Session会失效。Session内存储的多个
数据项是整体失效的。
6,Session的保存
在Session中如果保存的是非序列化的类比如DataView,在用SQLServer保存Session的模式下,无法使用。查看一个类是否是序列化的方法是,需看是否用[Serializable]来标记了该类.
在PHP中
PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。
[1]
PHP Session 变量
您在计算机上操作某个应用程序时,您打开它,做些更改,然后关闭它。这很像一次对话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应用程序。然而,在因特网上问题出现了:由于 HTTP 地址无法保持状态,Web 服务器并不知道您是谁以及您做了什么。
PHP session 解决了这个问题,它通过在服务器上存储用户信息以便随后使用(比如用户名称、购买商品等)。然而,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久存储信息,可以把数据存储在数据库中。
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。
[1]
在JSP中
Jsp的session是使用bean的一个生存期限,一般为page,session意思是在这个用户没有离开网站之前一直有效,如果无法判断用户何时离开,一般依据系统设定,tomcat中设定为30分钟.
我们使用session功能,可以达到多个jsp程序从操作同一个java bean,那么这个java bean可以作为我们传统意义上的"全局变量池".(在java中我们可以使用static静态化一个变量和方法,使用singleton唯一化对象.)
在项目实践中,我们Jsp程序中很多参数需要从数据库中读取,有的参数实际读取一次就可以,如果设计成每个用户每产生一个页面都要读取数据库,很显然,数据库的负载很大,同时也浪费时间,虽然可能有
数据库连接池优化,但是尽量少使用数据库是我们编程的原则.
JSP使用一个叫HttpSession的对象实现同样的功能。HTTPSession 是一个建立在cookies 和URL-rewriting上的高质量的界面。Session的信息保存在
服务器端,Session的id保存在客户机的cookie中。事实上,在许多服务器上,如果浏览器支持的话它们就使用cookies,但是如果不支持或废除了的话就自动转化为URL-rewriting,session自动为每个流程提供了方便地存储信息的方法。
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.getAttribute("item") //检索出session的值并转化为整型
setAttribute 提供一个关键词和一个值。会替换掉任何以前的值。(在jsp1.0中为putValue)
session.setAttribute("ItemValue", itemName); // ItemValue 必须不是must简单类型
在应用中使用最多的是getAttribute和setAttribute.现以一个简单的例子来说明session的应用,test1.jsp(信息写入session),test2.jsp(从session读出信息)。
test1.jsp
<HEAD>
<TITLE> Document </TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<%
session.setAttribute("str",new String(“this is test”));
%>
</BODY>
</HTML>
test2.jsp
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<%
String ls_str=null;
ls_str=(String)session.getAttribute("str");
out.println(“从session里取出的值为:”+ls_str);
%>
</BODY>
</HTML>