Session:在计算机中,尤为是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,若是该用户尚未会话,则 Web 服务器将自动建立一个 Session 对象。当会话过时或被放弃后,服务器将终止该会话。Session 对象最多见的一个用法就是存储用户的首选项。例如,若是用户指明不喜欢查看图形,就能够将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。注意 会话状态仅在支持 cookie 的浏览器中保留。php
Session直接翻译成中文比较困难,通常都译成时域。在计算机专业术语中,Session是指一个终端用户与交互系统进行通讯的时间间隔,一般指从注册进入系统到注销退出系统之间所通过的时间。以及若是须要的话,可能还有必定的操做空间。
具体到Web中的Session指的就是用户在浏览某个网站时,从进入网站到关闭浏览器所通过的这段时间,也就是用户浏览这个网站所花费的时间。所以从上述的定义中咱们能够看到,Session其实是一个特定的时间概念。
(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地必定路径下的session库中,这个路径能够经过php.ini文件中的session.save_path指定,下次浏览网页时能够加载使用。
解决方案
那什么是Session的解决方案呢?咱们知道,用户访问一个网站时每每须要浏览许多网页。Session的使用在不一样的语言中的使用方法特色不尽相同。对于一个经过PHP构筑的网站来讲,用户在访问的过程当中须要执行许多的PHP脚本。然而因为
HTTP协议自身的特色,用户每执行一个PHP脚本都须要和Web
服务器从新创建链接。
又因为无状态记忆的特色,这次链接没法获得上次链接的状态。这样,用户在一个PHP脚本中对一个变量进行了赋值操做,而在另一个PHP脚本中却没法获得这个变量的值。例如,用户在负责登陆的PHP脚本中设置了$user="wind",却没法在另外一个PHP脚本中经过调用$user来得到“wind”这个值。也就是说,在一次HTTP请求中,PHP没法将已经赋值的参数传递个下一次http请求的脚本。所以,每一个PHP脚本中所定义的变量都是只在本次HTTP请求内有效,本次HTTP请求结束,PHP就会释放掉这些为这些变量分配的内存。
Session解决方案,就是要提供在PHP脚本中定义全局变量的方法,使得这个全局变量在同一个Session中对于全部的PHP脚本都有效。上面咱们提到了,Session不是一个简单的时间概念,一个Session中还包括了特定的用户和
服务器。所以更详细地讲,在一个Session定义的全局变量的做用范围,是指这个Session所对应的用户所访问的全部PHP。
例如A用户经过Session定义了一个全局变量$user=“wind”中,而B用户经过Session定义的全局变量$user=“jane”。那么在A用户所访问的PHP脚本中,$user的值就是wind。
使用方法
Session 是 用于保持状态的基于 Web
服务器的方法。Session 容许经过将对象存储在 Web服务器的内存中在整个用户会话过程当中保持任何对象。
Session 一般用于执行如下操做
存储须要在整个用户会话过程当中保持其状态的信息,例如登陆信息或用户浏览 Web应用程序时须要的其它信息。
存储只须要在页从新加载过程当中或按功能分组的一组页之间保持其状态的对象。
Session 的做用就是它在 Web服务器上保持用户的
状态信息供在任什么时候间从任何设备上的页面进行访问。由于浏览器不须要存储任何这种信息,因此可使用任何浏览器,即便是像 Pad 或手机这样的浏览器设备。
持久性方法的限制
随着愈来愈多用户登陆,Session 所须要的
服务器内存量也会不断增长。
访问 Web应用程序的每一个用户都生成一个单独的 Session 对象。每一个 Session 对象的持续时间是用户访问的时间加上不活动的时间。
若是每一个 Session 中保持许多对象,而且许多用户同时使用 Web应用程序(建立许多 Session),则用于 Session 持久性的服务器内存量可能会很大,从而影响了可伸缩性。
功能缺陷
目前ASP的开发人员都正在使用Session这一强大的功能,可是在他们使用的过程当中却发现了ASP Session有如下缺陷:
进程依赖性
ASP Session状态存于IIS的进程中,也就是
inetinfo.exe这个程序。因此当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS服务都会形成信息的丢失。
Session状态使用范围的局限性
当一个用户从一个网站访问到另一个网站时,这些Session信息并不会随之迁移过去。例如:新浪网站的WWW
服务器可能不止一个,一个用户登陆以后要去各个频道浏览,可是每一个频道都在不一样的服务器上,若是想在这些WWW服务器共享Session信息怎么办呢
Cookie的依赖性
实际上客户端的Session信息是存储在Cookie中的,若是客户端彻底禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了。
鉴于ASP Session的以上缺陷,微软的设计者们在设计开发 ASP .NET Session时进行了相应的改进,彻底克服了以上缺陷,使得ASP .NET Session成为了一个更增强大的功能。
Filter:Filter 技术是servlet 2.3新增长的功能。servlet2.3是sun公司于2000年10月发布的,它的开发者包括许多我的和公司团体,充分体现了sun公司所倡导的代码开放性原则。在众多参与者的共同努力下,servlet2.3比以往功能都强大了许多,并且性能也有了大幅提升。java
特色功能
它新增长的功能包括:
1. 应用程序生命周期事件控制;
2. 新的国际化;
4. 新的错误及安全属性;
5. 不同意使用HttpUtils 类;
6. 各类有用的方法;
7. 阐明并扩展了几个servlet DTD;
8. filter功能.
功能介绍
其中最重要的就是filter功能.它使用户能够改变一个request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它可以在一个request到达servlet以前
预处理request,也能够在response离开servlet时处理response.换种说法,filter实际上是一个“servlet chaining“(servlet 链).
包括
1. 在servlet被调用以前截获;
2. 在servlet被调用以前检查servlet request;
3. 根据须要修改request头和request数据;
4. 根据须要修改response头和response数据;
5. 在servlet被调用以后截获.
你可以配置一个filter 到一个或多个servlet;单个servlet或servlet组可以被多个filter 使用。几个实用的filter 包括:用户辨认filter,日志filter,审核filter,加密filter,符号filter,能改变xml内容的XSLT filter等。
一个filter必须实现javax.servlet.Filter。
三个方法
1. void setFilterConfig(FilterConfig config) //设置filter 的配置对象;
2. FilterConfig getFilterConfig() //返回filter的配置对象;
3. void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) //执行filter 的工做.
注:现setFilterConfig和getFilterConfig方法已取消,代之为init(FilterConfig config)和destory()方法。