导航:首页 > 配服务器 > 如何通知服务器浏览器被关闭

如何通知服务器浏览器被关闭

发布时间:2022-10-04 10:06:41

❶ httplook怎么使用,找不到输入url的地方,好像也不能自动监听浏览器啊

一个术语届
在我的经验,会话字可能是仅次于滥用交易的程度,更有趣的是,在某些意义上是相同的会话的事务上下文。

会话,中文经常翻译成一个会话,其本义是指有始有终的一系列动作/消息,比如拿起电话拨打一个电话挂断时要调用的在中间的一系列的流程,可以称为会话。有时候,我们可以看到的话“在一个浏览器会话中,...”,其中的谈话是其本义使用的术语,是衡量一个浏览器窗口打开到关闭这个期间,E。最令人困惑的是“用户(客户端)在会话过程中,”的话,它可能指用户的一系列动作(正常情况下是与一系列具体行动的目的,如购买商品登录这样的网上购物结帐注销过程中,有时简称为交易),但有时也可能仅仅是指一个连接,有可能是指的意思,E,差异只能靠上下文来推断,E° 。

但是,当会话词是与网络协议,它也往往意味着“面向连接”和/或“持有”,这两个含义,“面向连接”指的是通信双方在通信之前,先来建立沟通的渠道,如电话,直到对方接到一个电话通信才能开始,与此相对的是一个字母,把信送给你,当你不能确认地址是否正确的对方,可能无法建立沟通渠道,但发件人,通信已经开始了。 “保留”是指党能够沟通了一系列的消息关联的消息之间可以互相依赖,例如,一个服务员可以识别老客户前来再次记得上一次的客户还欠一块钱存储。 “一个TCP会话”或“POP3会话”,E¢这种类型的例子。

到web服务器蓬勃发展的时代,会话上下文中的语义Web开发有一个新的扩展,它的含义是指用来保持溶液状态的客户端和服务器之间的一类,E£ 。有时会话也用来指到该溶液中的存储结构,如“储存在一个会话中,其中xxx”,§。由于给各种语言的Web开发在一定程度上提供了这种解决方案的支持,所以在一个特定的语言的上下文中,会话也被用来指语言解决方案,如定期提供在java javax.servlet.http.HttpSession称为会话,E。

鉴于这种混乱已不可改变的,这在会话中使用的术语将根据上下文有不同的含义,请注意区分。

在本文中,使用中国的“浏览器会话”表达的意思,E,使用“session机制”,要表达的意思,英镑,使用“会话”表达的意思,E“,使用特定的“的HttpSession的”要表达的意思,E

二,HTTP协议和国家仍然

HTTP协议本身是无状态的HTTP协议,它与原来的目的是一致的,客户端只需要一个简单的请求到服务器下载某些文件,无论是客户端或服务器记录彼此的行为,在过去是没有必要的,每次请求之间是独立的,像一个客户和一个自动售货机或正常(非成员),如超市之间的关系。

但是,聪明的(或贪婪?),人们很快发现,如果我们能够提供一些需求的网页上生成的动态信息将变得更加有用,像有线电视加上点播功能相同。这种需求一方面迫使逐步添加HTML表单,脚本,DOM和其他客户端的行为,其他服务器侧出现了CGI规范的动态响应客户端的请求,作为传输载体的HTTP协议也添加一个文件上传,这些功能的cookie。 Cookie是解决无状态的HTTP协议中的缺陷的努力的作用。至于后来出现的会话机制又是一个客户端和服务器之间保持状态的解决方案。

让我们来看看几个例子来说明会话cookie和机制之间的差异和相似之处。我曾经常去的一家咖啡店,免费赠品喝五杯咖啡,一杯咖啡的优惠,然而,消费5杯咖啡的机会不大,那么你需要一些方式来记录消费一定数量的客户。试想一下,其实没什么低于以下几种选择:

1,店员是非常强大的,能够记住每个顾客的消费,只要顾客一走进咖啡店,店员会知道如何对待。支持这种做法的协议本身规定。

2,给客户一张卡,记录消费金额,是一个普遍的有效性。每一个消费者,如果顾客出示这张卡,你将之前或之后与消费者的消费联系在一起。这种方法是在客户端保持状态。

3,给顾客一张会员卡,除了卡号信息没有记录超出每个消费者,如果客户生产出的卡,然后店员在店里找到相应的卡号记录记录添加一些消费者信息。这种做法是在服务器端保持状态。

由于HTTP协议是无状态的,但出于种种考虑不想成为一个国家,因此,后两种方案已成为一个现实的选择。具体而言,cookie机制用于保持状态的客户端程序,并且会话的机制是用来保持的状态的服务器端解决方案。我们也看到,利用服务器端程序在客户端保持状态也需要保存一个标识,所以会话cookie机制可能需要的帮助机制,以实现节能的目的确定,但实际上它还有其他选项。

三,理解cookie机制

的cookie机制的基本原理是一样的,在上面的例子很简单,但有几个问题要解决:“会员卡”如何分发;会员卡“的内容,以及客户如何使用”会员卡“。

正统的cookie分发是通过扩展HTTP协议,服务器通过HTTP响应头一排,添加特殊说明,按照说明进行操作提示浏览器将生成相应的cookie。然而,纯粹的客户端脚本如JavaScript或VBScript也可以生成cookie中。

使用cookie是由浏览器按照一定的原则在后台自动发送到服务器。浏览器检查所有存储的cookie,如果声明一个cookie范围大于或等于所请求的资源,把附在请求资源的HTTP请求发送到服务器的头的cookie。意思是麦当劳的会员卡只能在麦当劳的店里出示,如果一个商店也发行了自己的会员卡,然后进店除了麦当劳的会员卡到现在的时间,而且还产生一个成员的存储卡。

的cookie内容包括:名字,值,过期,路径和域。

在那里你可以指定一个特定的领域,如域。 google.com,相当于总店招牌,比如宝洁公司(Procter&Gamble),你也可以指定一个特定的领域,如机器或froogle.google.com,您可以用飘柔做比。

如下的URL路径的路径后,该域名,比如/或者/ foo的等,可以做一定比例飘柔专柜。

路径和域共同构成的cookie的范围。

如果不设置过期时间,然后为浏览器会话cookie的寿命,只要关闭浏览器窗口,cookie的消失。这一时期的生活的浏览器会话cookie被称为会话cookie。会话cookie一般不存储在硬盘上,但存储在内存中,当然,这种行为是不是规范。如果你设置的过期时间,浏览器cookie保存到硬盘驱动器,打开浏览器后,再次关闭这些cookie仍然有效,直到过期时间超过设定。

存储在硬盘上的Cookie在不同的浏览器,可以在进程间共享,比如两个IE窗口。并存储在内存中的cookie,不同的浏览器有不同的方法。对于IE浏览器,在打开的窗口中,按Ctrl-N(或者从文件菜单)打开的窗口可以与原窗口共享,而使用其他方式来打开IE进程不会共享内存窗口已经打开饼干;对于Mozilla Firefox0.8中,所有的流程和标签可以共享相同的cookie。一般用javascript的window.open打开的窗口与原窗口共享内存cookie。只认cookie的浏览器会话cookie不承认这样的人造成了很大的困扰,使用常规的网络应用程序开发人员的会话处理机制。

这里是GOOLGE集一个cookie的响应头的例子

HTTP/1.1 302找到

位置:

的Set-Cookie:PREF = ID = 0565f77e132de138:净重= 1 :TM = 1098082649:LM = 1098082649:S = KaeaCFPo49RiA_d8到期=星期日,1月17日 - 2038年19时14分07秒GMT;路径= /;域=。 google.com

的Content-Type:text / html类型

这是使用HTTPLook这个HTTP Sniffer软件捕获记录的一部分,HTTP通信

浏览器再次访问GOOLGE自动送出当资源的cookie

使用Firefox可以很容易地观察现有的cookie值,

请使用HTTPLook Firefox可以很容易理解的cookie工程。

IE也可以设置在询价之前接受cookie

这是一个对话框,要求接受Cookie。

四,理解机制

会话的会话机制是一种机制,为服务器,服务器使用一个哈希表状结构(也可能是使用一个哈希表)来保存信息。

当程序需要为客户端请求创建一个会话时,服务器首先检查客户端的请求已被列入会话标识符 - 所谓的会话ID,如果已包含一个session id,然后在客户端有先前已创建服务器会话的会话ID将主持本届会议,检索使用(如果没有检索到,它可以创建一个),如果客户端请求不包含会话ID,然后为这个客户端创建一个会话,并生成一个会话这个会话ID,会话ID值应该既不是重复的,不容易找到规律复制字符串,这个session id将返回响应这个客户端保存。

这种方式可以使用会话cookie保存,以便根据规则把这个标识服务器的一个互动的过程中浏览器可以自动播放。一般来说,cookie的名称是类似SEEESIONID的。对于Web应用程序生成的cookie如WebLogic,JSESSIONID = ! -145788764,它的名字是JSESSIONID。

由于cookie可以被人为的禁止,必须有其他的机制被禁止的cookie会话ID仍然能够回传给服务器。经常使用的一种技术叫做URL重写,会话ID被附加到URL路径直接背后,还有另外两种方法,一种是在JSESSIONID = 的形式,为更多的信息,表现的URL路径! -145788764

另一种是作为查询字符串附加到URL后面的表现! -145788764

这两种方式为用户没有任何区别,只有服务器解析不同的方式处理时,第一种方法是会话ID信息也有利于区分正常程序参数。

整个交互过程中,为了始终保持状态,就必须要求每个客户端后路径可能包含会话ID。

另一种技术称为隐藏的表单字段。是服务器会自动表单,添加一个隐藏字段,这样,当表单被提交到这个session id传递回服务器。例如,下面的表格

被传递到客户端之前被改写

现在已很少使用这种技术,我谈到一个非常古老的iPlanet6(SUNONE应用服务器的前身)上使用这种技术。

其实,这种技术可以应用,只需使用URL重写的行动,而不是。

谈论的会话机制,我经常听到这样的误会“,只要在浏览器关闭,会话就消失了。”事实上,想象例子会员卡除非客户作出商店卖卡,否则店里会不会轻易删除客户数据。同样是真实的会话,除非程序通知服务器删除会话,否则服务器将仍然存在,程序通常都是在用户注销时发出命令删除会话。然而,浏览器从来不会主动关闭之前通知服务器将被关闭,服务器将不会有机会知道浏览器已经关闭,之所以有这样的误解最多的一届机制使用会话cookie来存储会话ID,会话ID消失后关闭浏览器,它不能连接到服务器,再找到原来的session。如果服务器设置的cookie存储在您的硬盘上,或者使用某种手段改写浏览器发送一个HTTP请求头,原来的session id发送到服务器,然后重新打开浏览器仍然能够找到原来的会话。

正是因为浏览器被关闭,并不导致会话被删除,迫使服务器SEESION设立了故障时间,当距离客户端上使用,盘中一度时间超过届满时间,服务器,客户端已停止其活动,该会话将被删除以节省存储空间。

五,理解javax.servlet.http.HttpSession

HttpSession会话的机制是Java平台的实施规范,因为它是唯一的,具体到每一个Web应用程序服务器提供商的接口,除了规范的支持,仍然会有一些规范未指定的细微差别。在这里,我们与BEA公司的Weblogic Server8.1作为例子来演示。

第一,WebLogic Server提供的一组参数来控制它的HttpSession实现,包括使用cookie的开关选项,使用URL重写的开关选项,会话持久性设置,会话过期时间设置,并为各种cookie的设置,比如设置cookie的名称,路径,域,cookie的生存时间。

当服务器进程停止或重新启动,正常情况下,将被保存在内存中,内存的会议将被清除,如果你将它设置为会话持久性功能,将服务器会话保存到您的硬盘驱动器,当服务器进程重新启动或信息将能够被再次使用时,WebLogic Server支持持久的方法,包括文件,数据库,客户端cookie保存和繁殖。

持续复制是没有严格保持,因为会话实际上是存储在内存中,但同样的信息被复制到每个集群内的服务器进程,这样即使服务器进程停止工作能在这个过程中仍然可以实现从其他会话。

cookie设置会影响生成的cookie,如果浏览器是一个会话cookie的生存时间。默认是使用会话cookie。有兴趣的人士可以用它来测试在第四季度,我们提到的那个误解。

Cookie路径的Web应用程序是一个非常重要的选项,此选项的默认处理,使得它有着明显的区别与其他服务器Weblogic服务器。稍后我们将讨论的话题。

会话设置参考[5]

六,HttpSession中常见问题

(本条所指的混合会话,E§ E)

1,创建会话时

一个常见的误解是,在客户端的会话访问,当它被创建,但事实是,直到服务器端程序调用HttpServletRequest的。 getSession()这样的语句只被创建,注意不显示,如果使用JSP 闭门会议中,JSP文件被编译成Servlet会自动添加这样的语句的HttpSession会话= HttpServletRequest.getSession(真),这是JSP隐式会话对象的原点。

因为会话会消耗内存资源,因此,如果你不打算使用会话,所有的JSP应该把它关闭。

综合前面的讨论,都将被删除2,会话,会话在下列情况下被删除。程序调用HttpSession.invalidate()令;或b。从最后客户收到发送的session id时间间隔超过会话超时设置,或c。服务器进程被停止(非持久性会议)

3,如何做到在浏览器关闭时删除会话

严格地说,这是不可能的。你可以做一点努力接近客户的所有页面使用javascript代码window.oncolose的监视浏览器的关闭动作,然后向服务器发送一个请求删除会话。但是,浏览器崩溃或强制杀进程仍然无能为力这些非常规手段。

4,有

,HttpSessionListener补偿是如何创建这样的监听监视会话的创建和销毁事件,发生这样的事件,你可以做一些相应的工作。请注意,创建和销毁的会话或动作触发的监听器,而不是相反。类似的HttpSession中伴有以及HttpSessionBindingListener接口,的HttpSessionActivationListener HttpSessionAttributeListener的听者。

5,存储在会话对象必须是可序列化

不是必需的。需要对象可以序列化会话,只是为了能够在集群中被复制,或者可以坚持,在必要的情况下,会话服务器可以暂时换出内存。在WebLogic Server控制台上放置一个非序列化对象的会话将收到一个警告。我用过的iPlanet版本如果会话已经没有序列化的对象在会话中有将是一个例外破坏,很奇怪。

6,如何正确处理与客户端的可能性禁止饼干

所有的URL使用URL重写,包括超链接,form的action,和重定向URL,具体做法参见[6

7,打开两个浏览器窗口访问应用程序将使用同一时段或不同的会话

见第三部分讨论的cookie,会话ID只认不认人,因此不同浏览器,不同的窗口开放和不同的cookie将被存储在受影响这个问题的答案。

8,如何防止用户打开两个浏览器窗口操作导致会话混乱

防止多次提交的问题是类似的形式,你可以设置客户端的令牌来解决。也就是说,服务器每次生成一个不同的ID返回给客户端,同时保存在会话中,客户端提交表单时,必须返回到服务器也是这个id,程序首先比较返回的id的值存储在会话是相同的,如果不一致,在此操作中所示前已经提交。可以发现在“J2EE核心模式”表示层模式的部分。需要注意的是,使用的javascript的window.open打开的窗口,一般不设置这个id,或者使用一个单独的ID,无法操作,以防止在主窗口,建议不要做window.open打开的窗口操作,这样就可以不设置。

9,为什么做这个动作的目的主要是为集群环境中提示Weblogic服务器会话发生在在Weblogic服务器改变会话的价值后,重新调用一次session.setValue

值的变化,你需要复制到其他服务器进程的价值,新的会话。

10,为什么会话了

排除会话正常的故障因素,服务器本身的可能性应该是微乎其微,虽然笔者iPlanet6SP1的加若干补丁Solaris版本是相当遇到;通过浏览器插件的可能性,我也遇到过3721插件造成的问题;理论上防火墙或者代理服务器在cookie处理也可能会造成问题。

发生,主要是因为这个问题是程序的错误,最常见的是在应用程序中访问另一个应用程序。在下一节中,我们将讨论这个问题。

七,跨应用程序的会话共享

这是通常的情况下,一个大型开发项目划分成若干小项目,为了能够干扰对方,要求每个小项目作为一个单独的Web应用程序开发中,但在最后突然发现了几个小项目需要之间共享一些信息,或者想使用session来实现SSO(单点登录),存储在会话登录用户信息,最自然的要求是应用程序之间互相访问对方的会话。

但是,按照Servlet规范,会话的范围应仅限于当前的应用程序,不同的应用程序之间是不能够访问每个会话。从实际的效果是每个应用服务器在遵守本规范,但其执行细节可能会有所不同,因此解决跨应用程序的会话共享方法也是不同的。

先看看Tomcat的Web应用程序是如何实现会话之间的隔离,从Tomcat视图设置cookie路径,其不同的应用程序设置的cookie路径是不同的,所以不同的应用程序所用的session id是不同的,即使在同一个浏览器窗口访问不同的应用程序,发送到服务器的会话ID可以是不同的。

根据这一特点,我们可以在会话推测Tomcat的内存结构如下。

我用过的iPlanet也采用同样的方式,估计SUNONE和iPlanet没有太大的区别。对于这样的服务器,解决方案是非常简单的想法,它的实际执行情况并不难。要么让所有的应用程序共享一个session id,或者让应用程序能够获得其他应用程序会话ID。

的iPlanet是一个非常简单的方式来实现共享一个session id,那就是每个应用程序的cookie路径都设为/(实际上应该是/ NASApp的,在其行为中的应用为根)。

</路径/ NASApp >

注操作共享会议应该遵循一些编程约定,如在会话属性名称前面的应用程序的前缀,使的setAttribute(“名称”,“新”)成为的setAttribute(的“app1.name”,“新”)中,为了防止命名空间冲突,领导互相覆盖。

在Tomcat中是不太方便的选择。在Tomcat版本3中,我们还可以有一些手段来共享会话。对于版本4以上的Tomcat,现在我还没有找到一个简单的解决方案。只能借助于第三方的力量,比如使用文件,数据库,JMS或者客户端cookie,URL参数或者隐藏字段等手段。

让我们来看看如何处理与WebLogic Server是会话。

从截图可以看到WebLogic Server应用程序设置的cookie路径为/,这是不是意味着在默认情况下,WebLogic服务器可以共享会话它?然而,一个小实验证明,即使不同的应用程序使用同一个会话,每个应用程序仍然只能访问自己设置这些属性。这表明,本次会议的WebLogic Server的内存结构可能看起来

对于这样的结构,机制本身的会话共享解决问题的会议应该是不可能的。另外电源通过一个第三个政党,比如使用文件,数据库,JMS或者客户端cookie,URL参数或者隐藏字段和其他手段,以及更方便的方式,就是以把一个应用程序的会话ServletContext的,所以从ServletContext的引用到应用程序之前,另一个应用程序可以通过以下方式获得。示例代码如下

应用á

context.setAttribute(“阿帕”,会话);

应用程序B,

contextA =上下文。的getContext(“/ APPA”);

HttpSession中sessionA =(HttpSession中)contextA.getAttribute(APPA);

值得注意的是,这种用法是不可移植的,因为根据ServletContext的的JavaDoc,应用服务器可以在出于安全原因context.getContext(“/ APPA”);返回一个空值,通过上述方法在WebLogic Server 8.1。

那么,为什么要所有的WebLogic Server应用程序设置的cookie路径/?正是在SSO,谁分享了本次会议的应用程序可以共享认证信息。一个简单的实验可以证明这一点,第一个日志,应用程序描述符weblogic.xml,cookie路径是/ APPA访问的另一个应用程序的要求重新登录,甚至如果反过来,先访问cookie路径为/应用程序,然后访问的路径,虽然不再提示登录,但注册用户的信息将会丢失。请注意,这个实验验证表单时,应使用基本身份验证方法其他的方式来处理第二个请求认证,因为浏览器和Web服务器没有达到通过会话。具体见文献[7] 14.8 secion授权,你可以所附的示例程序来做这些测试。

八,总结
session机制本身并不复杂,但其实施和配置灵活性的具体情况复杂。它还需要,我们可以不只是一个第一次的经验或者某一个浏览器,服务器的经验作为普遍的经验,但总是需要具体情况具体分析。

❷ 怎么判断用户非法退出,比如用户关闭了浏览器,我怎么能够知道用户退出了

有个监听类,可以监控session失效,比如超过设置的时间没有操作,关闭浏览器后
因为http协议是无状态的,客户端关浏览器 服务器端是不知道的。
javax.servlet.http.HttpSessionBindingListener;
写一个类继承这个接口,这个接口提供2个抽象方法,它会再session创建和失效的时候自动运行
valueBound()
valueUnbound()
在这个类里面可以操作session 和application

❸ 记住密码的原理是什么

应该是保存在Cookie里,session是放在服务器的内存里的。在用户关闭了网页窗口后,session就清空了。而Cookie是保存在用户的IE临时文件夹中的,再次登录时,读取其中的值传给服务器。

session是放在服务器的内存,Cookie是保存在用户端。以下是从网上搜到的相关内容,希望对你有用:
一、cookie机制和session机制的区别
*************************************************************************************
具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session
机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择
*************************************************************************************

二、会话cookie和持久cookie的区别
*************************************************************************************
如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。
*************************************************************************************

三、如何利用实现自动登录
*************************************************************************************
当用户在某个网站注册后,就会收到一个惟一用户ID的cookie。客户后来重新连接时,这个
用户ID会自动返回,服务器对它进行检查,确定它是否为注册用户且选择了自动登录,从而使用户务需给出明确的用户名和密码,就可以访问服务器上的资源。
*************************************************************************************

四、如何根据用户的爱好定制站点
*************************************************************************************
网站可以使用cookie记录用户的意愿。对于简单的设置,网站可以直接将页面的设置存储在cookie中完成定制。然而对于更复杂的定制,网站只需仅将一个惟一的标识符发送给用户,由服务器端的数据库存储每个标识符对应的页面设置。
*************************************************************************************

五、cookie的发送
*************************************************************************************
1.创建Cookie对象
2.设置最大时效
3.将Cookie放入到HTTP响应报头
如果你创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie:存储在浏览器的内存中,用户退出浏览器之后被删除。如果你希望浏览器将该cookie存储在磁盘上,则
需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
发送cookie需要使用HttpServletResponse的addCookie方法,将cookie插入到一个Set-Cookie HTTP请求报头中。由于这个方法并不修改任何之前指定的Set-Cookie报头,而是创建新的报头,因此我们将这个方法称为是addCookie,而非setCookie。同样要记住响应报头必须在任何文档内容发送到客户端之前设置。

六、cookie的读取
*************************************************************************************
1.调用request.getCookie
要获取有浏览器发送来的cookie,需要调用HttpServletRequest的getCookies方法,这个调用返回Cookie对象的数组,对应由HTTP请求中Cookie报头输入的值。
2.对数组进行循环,调用每个cookie的getName方法,直到找到感兴趣的cookie为止
cookie与你的主机(域)相关,而非你的servlet或JSP页面。因而,尽管你的servlet可能只发送了单个cookie,你也可能会得到许多不相关的cookie。
例如:
String cookieName = “userID”;
Cookie cookies[] = request.getCookies();
if (cookies!=null){
for(int i=0;i<cookies.length;i++){
Cookie cookie = cookies[i];
if (cookieName.equals(cookie.getName())){
doSomethingWith(cookie.getValue());
}
}
}
*************************************************************************************

七、如何使用cookie检测初访者
*************************************************************************************
A.调用HttpServletRequest.getCookies()获取Cookie数组
B.在循环中检索指定名字的cookie是否存在以及对应的值是否正确
C.如果是则退出循环并设置区别标识
D.根据区别标识判断用户是否为初访者从而进行不同的操作
*************************************************************************************

八、使用cookie检测初访者的常见错误
*************************************************************************************
不能仅仅因为cookie数组中不存在在特定的数据项就认为用户是个初访者。如果cookie数组为null,客户可能是一个初访者,也可能是由于用户将cookie删除或禁用造成的结果。
但是,如果数组非null,也不过是显示客户曾经到过你的网站或域,并不能说明他们曾经访问过你的servlet。其它servlet、JSP页面以及非Java Web应用都可以设置cookie,依据路径的设置,其中的任何cookie都有可能返回给用户的浏览器。
正确的做法是判断cookie数组是否为空且是否存在指定的Cookie对象且值正确。
*************************************************************************************

九、使用cookie属性的注意问题
*************************************************************************************
属性是从服务器发送到浏览器的报头的一部分;但它们不属于由浏览器返回给服务器的报头。
因此除了名称和值之外,cookie属性只适用于从服务器输出到客户端的cookie;服务器端来自于浏览器的cookie并没有设置这些属性。
因而不要期望通过request.getCookies得到的cookie中可以使用这个属性。这意味着,你不能仅仅通过设置cookie的最大时效,发出它,在随后的输入数组中查找适当的cookie,读取它的值,修改它并将它存回Cookie,从而实现不断改变的cookie值。
*************************************************************************************

十、如何使用cookie记录各个用户的访问计数
*************************************************************************************
1.获取cookie数组中专门用于统计用户访问次数的cookie的值
2.将值转换成int型
3.将值加1并用原来的名称重新创建一个Cookie对象
4.重新设置最大时效
5.将新的cookie输出
*************************************************************************************

十一、session在不同环境下的不同含义
*************************************************************************************
session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话是从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。
然而当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义。
session在Web开发环境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器端之间保持状态的解决方案。有时候Session也用来指这种解决方案的存储结构。
*************************************************************************************

十二、session的机制
*************************************************************************************
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
但程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否包含了一个session标识-称为session id,如果已经包含一个session id则说明以前已经为此客户创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的session对象,但用户人为地在请求的URL后面附加上一个JSESSION的参数)。
如果客户请求不包含session id,则为此客户创建一个session并且生成一个与此session相关联的session id,这个session id将在本次响应中返回给客户端保存。
*************************************************************************************

十三、保存session id的几种方式
*************************************************************************************
A.保存session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
B.由于cookie可以被人为的禁止,必须有其它的机制以便在cookie被禁止时仍然能够把session id传递回服务器,经常采用的一种技术叫做URL重写,就是把session id附加在URL路径的后面,附加的方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面。网络在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。
C.另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。
*************************************************************************************

十四、session什么时候被创建
*************************************************************************************
一个常见的错误是以为session在有客户端访问时就被创建,然而事实是直到某server端程序(如Servlet)调用HttpServletRequest.getSession(true)这样的语句时才会被创建。
*************************************************************************************

十五、session何时被删除
*************************************************************************************
session在下列情况下被删除:
A.程序调用HttpSession.invalidate()
B.距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间
C.服务器进程被停止

再次注意关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效。
*************************************************************************************

十六、URL重写有什么缺点
*************************************************************************************
对所有的URL使用URL重写,包括超链接,form的action,和重定向的URL。每个引用你的站点的URL,以及那些返回给用户的URL(即使通过间接手段,比如服务器重定向中的Location字段)都要添加额外的信息。
这意味着在你的站点上不能有任何静态的HTML页面(至少静态页面中不能有任何链接到站点动态页面的链接)。因此,每个页面都必须使用servlet或JSP动态生成。即使所有的页面都动态生成,如果用户离开了会话并通过书签或链接再次回来,会话的信息都会丢失,因为存储下来的链接含有错误的标识信息-该URL后面的SESSION ID已经过期了。
*************************************************************************************

十七、使用隐藏的表单域有什么缺点
*************************************************************************************
仅当每个页面都是有表单提交而动态生成时,才能使用这种方法。单击常规的<A HREF..>超文本链接并不产生表单提交,因此隐藏的表单域不能支持通常的会话跟踪,只能用于一系列特定的操作中,比如在线商店的结账过程
*************************************************************************************

十八、会话跟踪的基本步骤
*************************************************************************************
1.访问与当前请求相关的会话对象
2.查找与会话相关的信息
3.存储会话信息
4.废弃会话数据
*************************************************************************************

十九、getSession()/getSession(true)、getSession(false)的区别
*************************************************************************************
getSession()/getSession(true):当session存在时返回该session,否则新建一个session并返回该对象
getSession(false):当session存在时返回该session,否则不会新建session,返回null
*************************************************************************************

二十、如何将信息于会话关联起来
*************************************************************************************
setAttribute会替换任何之前设定的值;如果想要在不提供任何代替的情况下移除某个值,则应使用removeAttribute。这个方法会触发所有实现了HttpSessionBindingListener接口的值的valueUnbound
方法。
*************************************************************************************

二十一、会话属性的类型有什么限制吗
*************************************************************************************
通常会话属性的类型只要是Object就可以了。除了null或基本类型,如int,double,boolean。
如果要使用基本类型的值作为属性,必须将其转换为相应的封装类对象
*************************************************************************************

二十二、如何废弃会话数据
*************************************************************************************
A.只移除自己编写的servlet创建的数据:
调用removeAttribute(“key”)将指定键关联的值废弃
B.删除整个会话(在当前Web应用中):
调用invalidate,将整个会话废弃掉。这样做会丢失该用户的所有会话数据,而非仅仅由我们
servlet或JSP页面创建的会话数据
C.将用户从系统中注销并删除所有属于他(或她)的会话
调用logOut,将客户从Web服务器中注销,同时废弃所有与该用户相关联的会话(每个Web应用至多一个)。这个操作有可能影响到服务器上多个不同的Web应用
*************************************************************************************

二十三、使用isNew来判断用户是否为新旧用户的错误做法
*************************************************************************************
public boolean isNew()方法如果会话尚未和客户程序(浏览器)发生任何联系,则这个方法返回true,这一般是因为会话是新建的,不是由输入的客户请求所引起的。
但如果isNew返回false,只不过是说明他之前曾经访问该Web应用,并不代表他们曾访问过我们的servlet或JSP页面。
因为session是与用户相关的,在用户之前访问的每一个页面都有可能创建了会话。因此isNew为false只能说用户之前访问过该Web应用,session可以是当前页面创建,也可能是由用户之前访问过的页面创建的。
正确的做法是判断某个session中是否存在某个特定的key且其value是否正确
*************************************************************************************

二十四、Cookie的过期和Session的超时有什么区别
*************************************************************************************
会话的超时由服务器来维护,它不同于Cookie的失效日期。首先,会话一般基于驻留内存的cookie
不是持续性的cookie,因而也就没有截至日期。即使截取到JSESSIONID cookie,并为它设定一个失效日期发送出去。浏览器会话和服务器会话也会截然不同。
*************************************************************************************

二十五、session cookie和session对象的生命周期是一样的吗
*************************************************************************************
当用户关闭了浏览器虽然session cookie已经消失,但session对象仍然保存在服务器端
*************************************************************************************

二十六、是否只要关闭浏览器,session就消失了
*************************************************************************************
程序一般都是在用户做log off的时候发个指令去删除session,然而浏览器从来不会主动在关闭之前通知服务器它将要被关闭,因此服务器根本不会有机会知道浏览器已经关闭。服务器会一直保留这个会话对象直到它处于非活动状态超过设定的间隔为止。
之所以会有这种错误的认识,是因为大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接到服务器时也就无法找到原来的session。
如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求报头,把原来的session id发送到服务器,则再次打开浏览器仍然能够找到原来的session。
恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为session设置了一个失效时间,当距离客户上一次使用session的时间超过了这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。
由此我们可以得出如下结论:
关闭浏览器,只会是浏览器端内存里的session cookie消失,但不会使保存在服务器端的session对象消失,同样也不会使已经保存到硬盘上的持久化cookie消失。
*************************************************************************************

二十七、打开两个浏览器窗口访问应用程序会使用同一个session还是不同的session
*************************************************************************************
通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的session id,这样我们信息共享的目的就达不到了。
此时我们可以先把session id保存在persistent cookie中(通过设置session的最大有效时间),然后在新窗口中读出来,就可以得到上一个窗口的session id了,这样通过session cookie和persistent cookie的结合我们就可以实现了跨窗口的会话跟踪。
*************************************************************************************

二十八、如何使用会话显示每个客户的访问次数
*************************************************************************************
由于客户的访问次数是一个整型的变量,但session的属性类型中不能使用int,double,boolean等基本类型的变量,所以我们要用到这些基本类型的封装类型对象作为session对象中属性的值
但像Integer是一种不可修改(Immutable)的数据结构:构建后就不能更改。这意味着每个请求都必须创建新的Integer对象,之后使用setAttribute来代替之前存在的老的属性的值。例如:
HttpSession session = request.getSession();
SomeImmutalbeClass value = (SomeImmutableClass)session.getAttribute(“SomeIdentifier”);
if (value= =null){
value = new SomeImmutableClass(…); // 新创建一个不可更改对象
}else{
value = new SomeImmutableClass(calculatedFrom(value)); // 对value重新计算后创建新的对象
}
session.setAttribute(“someIdentifier”,value); // 使用新创建的对象覆盖原来的老的对象
*************************************************************************************

二十九、如何使用会话累计用户的数据
*************************************************************************************
使用可变的数据结构,比如数组、List、Map或含有可写字段的应用程序专有的数据结构。通过这种方式,除非首次分配对象,否则不需要调用setAttribute。例如

HttpSession session = request.getSession();
SomeMutableClass value = (SomeMutableClass)session.getAttribute(“someIdentifier”);
if(value = = null){
value = new SomeMutableClass(…);
session.setAttribute(“someIdentifier”,value);
}else{
value.updateInternalAttribute(…); // 如果已经存在该对象则更新其属性而不需重新设置属性
}
*************************************************************************************

三十、不可更改对象和可更改对象在会话数据更新时的不同处理
*************************************************************************************
不可更改对象因为一旦创建之后就不能更改,所以每次要修改会话中属性的值的时候,都需要
调用setAttribute(“someIdentifier”,newValue)来代替原有的属性的值,否则属性的值不会被更新
可更改对象因为其自身一般提供了修改自身属性的方法,所以每次要修改会话中属性的值的时
候,只要调用该可更改对象的相关修改自身属性的方法就可以了。这意味着我们就不需要调
用setAttribute方法了
*************************************************************************************

❹ 登陆有的网页会导致浏览器自动关闭是怎么回事

请参考:

使用Windows操作系统的人有时会遇到这样的错误信息:“0X????????指令引用的0x00000000内存,该内存不能written”,然后应用程序被关闭。如果去请教一些“高手”,得到的回答往往是“Windows就是这样不稳定”之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单分析这种错误的常见原因。

一、应用程序没有检查内存分配失败

程序需要一块内存用以保存数据时,就需要调用操作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是“动态内存分配”,内存地址也就是编程中的“指针”。

内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的指针,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的“健壮性”。

若应用程序没有检查这个错误,它就会按照“思维惯性”认为这个值是给它分配的可用指针,继续在之后的运行中使用这块内存。真正的0地址内存区保存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即死机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会出现上述的“写内存”错误,并指出被引用的内存地址为“0x00000000”。

内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中“安装”的病毒程序),更改了大量的系统参数和系统文件之后。

二、应用程序由于自身BUG引用了不正常的内存指针

在使用动态分配的应用程序中,有时会有这样的情况出现:程序试图读写一块“应该可用”的内存,但不知为什么,这个预料中可用的指针已经失效了。有可能是 “忘记了”向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是被操作终止运行,回收全部资源。计算机世界的法律还是要比人类有效和严厉得多啊!

像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误。无效指针不一定总是0,因此错误提示中的内存地址也不一定为“0x00000000”,而是其他随机数字。

如果系统经常有所提到的错误提示,下面的建议可能会有帮助:

1.查看系统中是否有木马或病毒。这类程序为了控制系统往往不负责任地修改系统,从而导致操作系统异常。平常应加强信息安全意识,对来源不明的可执行程序绝不好奇。

2.更新操作系统,让操作系统的安装程序重新拷贝正确版本的系统文件、修正系统参数。有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序。

3.试用新版本的应用程序。
问题

运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。
“0x????????”指令引用的“0x????????”内存。该内存不能为“read”。
“0x????????”指令引用的“0x????????”内存,该内存不能为“written”。
一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。

故障分析

硬件方面:
一般来说,内存出现问题的可能性并不大,主要方面是:内存条坏了、内存质量有问题,还有就是2个不同牌子不同容量的内存混插,也比较容易出现不兼容的情况,同时还要注意散热问题,特别是超频后。你可以使用MemTest 这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。
假如是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,就要检查是不是内存出问题了或者和其它硬件不兼容。

软件方面:
先简单说说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在其一位置时,因为没有足够空间,就会发生溢出现象。举个例子:一个桶子只能将一斤的水,当放入两斤的水进入时,就会溢出来。而系统则是在屏幕上表现出来。这个问题,经常出现在windows2000和XP系统上,Windows 2000/XP对硬件的要求是很苛刻的,一旦遇到资源死锁、溢出或者类似Windows 98里的非法操作,系统为保持稳定,就会出现上述情况。另外也可能是硬件设备之间的兼容性不好造成的。

几个例子

例一:打开IE浏览器或者没过几分钟就会出现"0x70dcf39f"指令引用的"0x00000000"内存。该内存不能为“read”。要终止程序,请单击“确定”的信息框,单击“确定”后,又出现“发生内部错误,您正在使用的其中一个窗口即将关闭”的信息框,关闭该提示信息后,IE浏览器也被关闭。
解决方法:修复或升级IE浏览器,同时打上补丁。看过其中一个修复方法是,Win2000自升级,也就是Win2000升级到Win2000,其实这种方法也就是把系统还原到系统初始的状态下。比如你的IE升级到了6.0,自升级后,会被IE5.0代替。

例二:在windows xp下双击光盘里面的“AutoRun.exe”文件,显示“0x77f745cc”指令引用的“0x00000078”内存。该内存不能为“written”,要终止程序,请单击“确定”,而在Windows 98里运行却正常。
解决方法:这可能是系统的兼容性问题,winXP的系统,右键“AutoRun.exe”文件,属性,兼容性,把“用兼容模式运行这个程序”项选择上,并选择“Windows 98/Me”。win2000如果打了SP的补丁后,只要开始,运行,输入:regsvr32 c:\winnt\apppatch\slayerui.dll。右键,属性,也会出现兼容性的选项。

例三:RealOne Gold关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现“0xffffffff”指令引用的“0xffffffff”内存。该内存不能为“read” 的提示。
解决方法:当使用的输入法为微软拼音输入法2003,并且隐藏语言栏时(不隐藏时没问题)关闭RealOne就会出现这个问题,因此在关闭RealOne之前可以显示语言栏或者将任意其他输入法作为当前输入法来解决这个问题。

例四:我的豪杰超级解霸自从上网后就不能播放了,每次都提示“Ox060692f6”(每次变化)指令引用的“Oxff000011”内存不能为“read”,终止程序请按确定。
解决方法:试试重装豪杰超级解霸,如果重装后还会,到官方网站下载相应版本的补丁试试。还不行,只好换就用别的播放器试试了。

例五:双击一个游戏的快捷方式,“Ox77f5cdO”指令引用“Oxffffffff”内存,该内存不能为“read” ,并且提示Client.dat程序错误。
解决方法:重装显卡的最新驱动程序,然后下载并且安装DirectX9.0。

例六:一个朋友发信息过来,我的电脑便出现了错误信息:“0*772b548f”指令引用的“0*00303033”内存,该内存不能为“written”,然后QQ自动下线,而再打开QQ,发现了他发过来的十几条的信息。
解决方法:这是对方利用QQ的BUG,发送特殊的代码,做QQ出错,只要打上补丁或升级到最新版本,就没事了。

例七:我的笔记本电脑用的XP系统,有时关闭网页时会弹出tbrowser.exe遇到问题需要关闭,然后有弹出0x03e7c738指令引用的0x03e7c738内存,该内存不能为read,请问是怎么回事?
解决方法:先查杀一下病毒,另外如果你安装了浏览增强之类的软件,请卸掉。

例八:从桌面或开始菜单中打开任何一个程序, 出现错误提示:"0x........"指令引用的"0x00000000"内存,该内存不能为"read"。省略号代表可变值。而从运行中打开程序没问题。
解决方法:运行regedit进入注册表, 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks 下,应该只有一个正常的键值"{AEB6717E-7E19-11d0-97EE-00C04FD91972}, 将其他的删除(默认键值当然不要删除)。

例九:我三个月前配了台机子。系统比较不稳定,三个月内已经重装过多次系统,四五天前刚装过系统,可是经常随机地出现Explorer-应用程序错误,“0x4a01259d“指令引用的“0x00000000"内存。该内存不能为 “read"。要终止程序,请单击“确定“。要调试程序,请单击“取消”。如果点确定,windows桌面就不见了。这种问题在之前的系统也出现过,不知道是不是硬件的问题?
解决方法:内存的兼容性问题!遇到这类问题,用户可以自行打开机器把内存的位置调动一下,看问题是否可以解决,如果问题依旧,可与你的朋友调换内存使用。

通过上面的几个例子,可以看到,出现故障的原因有好多种,下面列出已经提到和有可能发生的原因,方便查阅。

问题产生原因原因--解决方法

内存条坏了--更换内存条

双内存不兼容--使用同品牌的内存或只用一条内存

内存质量问题--更换内存条

散热问题--加强机箱内部的散热

内存和主板没插好或和其它硬件不兼容等--重插内存或换个插糟

硬盘有问题--更换硬盘

驱动问题--重装驱动。如果是新系统,要先安装主板驱动

软件损坏--重装软件

软件有BUG--打补丁或用最新的版本。

软件和系统不兼容--给软件打上补丁或者试试系统的兼容模式

软件和软件之间有冲突--如果最近安装了什么新软件,卸载了试试

软件要使用到其它相关的软件有问题--重装相关软件。比如播放某一格式的文件时出错,可能是这个文件的解码器有问题

病毒问题--杀毒

杀毒软件与系统或软件冲突--由于杀毒软件是进入底层监控系统的,可能与一些软件冲突,卸载了试试

系统本身有问题--有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序,像SP的补丁,最好要打上。如果还不行重装系统或更换其它版本的系统了。

此问题已经引起我们的重视并有解决方案,请去我们的官方网站了解及下载相关程序。
运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。

“0x????????”指令引用的“0x????????”内存。该内存不能为“read”。

“0x????????”指令引用的“0x????????”内存,该内存不能为“written”。

以上的情况相信大家都应该见到过,甚至说一些网友因为不爽于这个经常出现的错误提示而屡次重装系统。相信普通用户应该不会理解那些复杂的十六进制代码。

我也遇到过这样的情况,不过WINDOWS的确是用久了就很不稳定了,没办法。

❺ 华为浏览器的停止服务是什么意思

是因为你停用了华为浏览器,导致华为浏览器无法使用的意思。

资料扩展:如何恢复华为浏览器使用

我们在手机上左右的滑动屏幕,找到华为手机的“设置”的图标。

请点击输入图片描述

这时就会打开华为浏览器的设置页面了,在页面中找到“应用和通知”的菜单项。

接着在打开的应用和通知的页面中,我们点击“应用管理”的菜单项。

然后在应有管理页面中,点击上面的“所有应用”的下拉按钮。

在弹出的下拉菜单中我们选择“已停用”的菜单项。

这时就会打开已停用的页面了,在停用列表中找到“华为浏览器”的菜单项。

点击后就会打开华为浏览器的应用信息页面,在页面中点击“启用”按钮就可以了。这样我们就会重新启用被停用的华为浏览器了。

❻ Session会在浏览器关闭后消失吗

通常情况下,当我们关闭浏览器再重新打开后,我们就需要再次进行登陆(如果没有进行下次自动登录之类的设置)。在Jav中(Session是通用的,这里以Java为例)有一种叫做Session机制(会话机制)来记录用户的登录信息。浏览器关闭之后,Session会被清除吗?
Session是一种服务器端的对象,保存在服务器中。 每个Session 有一个唯一的Session id。 Session的超时也是由服务器来控制。我们一般都会把Session和Cookie放在一起来说,它们具体的区别和联系这里我就不多说了,可以去查阅相关资料。Cookie分为内存中Cookie(也可以说是进程中Cookie)和硬盘中Cookie。大部分的Session机制都使用进程中Cookie来保存Session id的,关闭浏览器后这个进程也就自动消失了,进程中的Cookie自然就消失了,那么Session id也跟着消失了,再次连接到服务器时也就无法找到原来的Session了。
其实服务器是不会知道浏览器关闭了没有(当然,你可以在关闭的时候去通知服务器,但一般都不会这样做),所以关闭浏览器时服务器是不会删除Session的,也正是这个原因服务器才会设置一个Session失效时间的,不然服务器早晚会被撑爆的。等距离上一次使用该Session的时间达到设置的失效时间时,服务器就会认为客户端已停止活动,便会将相应的Session删除。
当然,我们可以在登陆时点击下次自动登录,比如说CSDN的“记住我一周”,或者我们的购物车信息可以在切换不同浏览器时依然可用。这就要用到我们上文提到的另一种Cookie了——硬盘中Cookie,这时Session id将长期保存在硬盘上的Cookie中,直到失效为止。

❼ 用户关闭网页时怎么通知服务器"我注销了"

给你的网页加个unload事件处理器,这样无论是关闭网页还是跳转到其它页面,只要这个HTML文档被卸载,就会触发这个unload事件。在这个事件处理器中你就写一段JS代码,发个Ajax请求给服务器,告诉服务器,这个用户已经离开此网页,也就是注销了

❽ asp.net中如何判断关闭浏览器

后台是没有办法直接捕获到的,不过可以通过在页面中加入以下脚本让浏览器关闭时触发一次提交
<script>
window.onunload=function(){
if(event.clientX>document.body.clientWidth && event.clientY < 0 || event.altKey) //如果是关闭浏览器而不是刷新页面
__doPostBack('closing',''); //触发一次提交
}
</script>
然后即可在后台此动作进行捕获
protected void Page_Load(object sender, EventArgs e)
{
if (Request["__EVENTTARGET"] == "closing")
{

...最后的处理...
Response.End(); //因为是最后的处理,不需要页面输出,所以执行到这里就可以了
}

...原有的正常代码...
}

有些情况下,页面不会自动生成__doPostBack函数即其相关控件(如:页面上只有Button控件时),可以在页面上手工添加以下代码:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>

以上方法对于用户通过任务管理器中止IE进程之类的“狠招”没有任务办法...
另外还有个缺点:
1.只有在用户关闭浏览器时才会触发,如果是页面跳转就捕获不到了
2.当然也可以把那个脚本改成
<script>
window.onunload=function(){ __doPostBack('closing','');}
</script>
这样,不管如果都会触发提交,但是问题更大,因为即使是用户进行正常的页面提交,比如点击页面上的某个按钮也会触发这个事件!
3.解决办法是使用UpdatePanel,这样普通的提交是不会刷新页面的,也就不会触发window.onunload事件了。但是还有一个问题,就是当第一次页面发生跳转时(不管是后台控制还是前面用户操作的)都会使页面变成一个空白页面。因为那个脚本强制让页面刷新了一下,导致跳转失效,而后台捕获到了closing参数,处理完后终止了输出,导致页面变成了空白页。
4.也有办法解决后台控制的跳转问题,前是前台用户修改地址栏这样的跳转就没有办法了,不想细写了,反正我没找到一个完美的解决办法。
PS:以上方法还有一个恶心的用途,把后台的那句"Response.End();"去掉后,就可以让用户永远离开你的页面(包括修改地址栏和点击收藏夹等),除非关闭浏览器

另外再提供一个解决的思路,可以较好的实现页面关闭或页面跳转后的处理,但是实现起来相对麻烦些。就是用ajax做“心跳”:当用户打开你的页面时,保存一个对应的时间戳以及页面关闭后要做的处理中用到的相关信息。在页面中加入一个时间触发器,每过一段时间(比如8秒)就用ajax提交一次,刷新用户对应的时间戳。(也可以在global的sessionstart中进行时间戳的创建,并用sessionid作为标识进行刷新,这样可以不局限于一个页面,做到仅当用户关闭所有打开你的站点的窗口之后才触发,灵活性非常高)另外用一个线程,每过一段时间去检查这个保存的时间戳(比如20秒),如果发现每个时间戳和系统当前时间相差大于等于阀值(比如20秒)即认定用户关闭了浏览器或跳转到别的页面了,然后就可以进行你要的处理了。

写得很乱,不知道你能看明白不?

阅读全文

与如何通知服务器浏览器被关闭相关的资料

热点内容
苹果笔记本t2加密芯片怎么打开 浏览:796
安卓如何把手机投屏至电视 浏览:737
方舟编译器现在可提速哪些软件 浏览:58
微信加密为什么是黑屏 浏览:473
android去电状态 浏览:602
苹果13如何加密视频 浏览:813
linuxweblogic缓存 浏览:67
云服务器不同地域 浏览:946
python闹钟怎么打 浏览:686
虚拟主机服务器有什么区别 浏览:833
算法与程序的奥秘章节检测 浏览:377
找pdf 浏览:529
与服务器连接断开如何处理 浏览:833
服务器维修预计十分钟什么意思 浏览:170
黑马程序员主打教学是什么 浏览:41
python九乘法表怎么编写 浏览:974
思维方式pdf 浏览:656
tcc社区app怎么注册 浏览:941
央视网下载加密 浏览:454
命令行访问服务器 浏览:36