asp中设置session过期时间方法总结
- 格式:doc
- 大小:35.00 KB
- 文档页数:6
如何解决ASP中session失效问题-最新年文档如何解决ASP中session失效问题ession是ASP中的一个重要对象,用于存储特定的用户会话所需的信息。
session中文是“会话”的意思,在ASP中代表了服务器与客户端之间的“会话”。
session的作用时间从用户到达某个特定的Web页开始,到该用户离开Web站点,或在程序中利用代码终止某个session结束。
引用session则可以让一个用户访问多个页面之间的切换也会保留该用户的信息。
系统为每个访问者都设立一个独立的session对象,用以存储session 变量,并且各个访问者的session对象互不干扰。
在《网页制作》教学中,我设计了这样一个任务:设计一个会员登录模块,会员分为一、二、三个级别,登录后,不同级别的会员在购买商品时可享受不同的折扣。
在实现模块功能时,就用到了session 对象。
然而,当某个会员登录并成功购买了一个商品后,当“再购买”行为发生时,系统却不能正确给出折扣。
为什么?仔细分析模块中的两个页面,即登录页面login.asp和购买页面buy.asp的关系:登录页面将会员的“级别”等信息保存在session中,购买页面则从session 中获得会员“级别”等信息,进而在价格上给予对应折扣。
“再购买”不能识别会员级别,显然是因为session失效了。
如何解决这个问题?我尝试了下面几种办法。
1 修改timeout属性值ession对象的timeout属性用来设置session会话的超时时间,以分钟表示,默认值为20分钟。
当timeout属性设置的时间值耗尽后,会话资源将被释放。
通过timeout属性破坏session对象,避免了session对象在服务器中无限制地产生,保护了服务器资源。
但是,在实际Web应用程序开发中,常常遇到如上述会员“再购买”中出现的session失效现象,导致用户状态信息丢失而致使应用流程无法正常完成的问题。
综合练习题2一、判断题1)Application对象只能记录变量、字符串、日期等简单的数据类型。
错2)Session对象记录的是所有浏览器端共享的变量,而Application对象记录的则是个别浏览器端专用的变量。
错3)Global.asa文件只有存放在网站的根目录下才能正常运行。
对4)Response中的Redirect方法可使浏览器连接到其他URL。
对5)在聊天室程序中,一般使用Application对象来存储在线人数。
对6)Response对象的Mappath方法可以将虚拟路径转化为物理路径。
对7)<%Session.abandon%>意思为:删除所有存储在Session中的对象并释放资源。
对8)Unlock方法用于解除ASP页面锁定的Application对象。
对9)在Form中使用GET方法把数据提交到服务器端的某一个ASP文件中,那么在该文件的程序中,可以使用10)11)12)13)同14)15)16)17)18)19)错20)21)22)23)24)25)26)27)28)在1)B.Request.ServerVariables("REMOTE_IP")C.Request.ClientCertificate("REMOTE_ADDR")D.Request.ClientCertificate("REMOTE_IP")2)执行完如下语句后,页面上显示的内容为(B)<%Response.Write"A"Response.EndResponse.Write"B"%>A.ABB. AC.ACD.ABC3)请问下面程序段执行完毕,页面上显示内容是(A)<%Response.Write"<a%>A.新浪B.<aC.新浪(超链接)D.该句有错,无法正常输出4)Session对象的默认有效期为(C)分钟?A.10B.15C.20D. 55)请问下面程序段执行完毕,页面上显示内容是(A)<%Response.WriteServer.HTMLEncode("<a%>A.新浪B.<aC.D.6)A.B.C.D.7)A.B.C.D.8)方法方法9)在10)A.Get11)B.C.Session和Applcation对象的事件处理过程,必须放在该文件中,以便相应事件的运用D.该文件中,用户必须使用ASP所支持的脚本语言并定义在标记<Script>之内。
如何使用S tateS erver保存S essio n作者:厦门邦初出处:厦门邦初点击数:27 时间:2010-8-13使用S tateS erver保存S essio n需要注意事项:1、tim eout=”20″为Sessi on 20分钟超时2、IP地址(可以是远程计算机 IP、计算机名称、域名)与端口号,端口号需与ASP.N ET St ate S ervic e 的服务端口一致Post by r oydux, 2008-4-23, Vi ews:89 正常操作情况下S essio n会无故丢失。
因为程序是在不停的被操作,排除Ses sion超时的可能。
另外,Se ssion超时时间被设定成60分钟,不会这么快就超时的。
这次到CSDN上搜了一下帖子,发现好多人在讨论这个问题,然后我又g oogle了一下,发现微软网站上也有类似的内容。
现在我就把原因和解决办法写出来。
原因:由于As程序是默认配置,所以W eb.Co nfig文件中关于S essio n的设定如下:<sess ionSt ate mod e=’In Proc’s tateC onnec tionS tring=’tcp ip=127.0.0.1:42424’sq lConn ectio nStri ng=’d ata sou rce=127.0.0.1;T ruste d_Con necti on=ye s’ cook ieles s=’tr ue’ tim eout=’60’/> 我们会发现sessi onSta te标签中有个属性m ode,它可以有3种取值:In Proc、State Serve r?SQL Serve r(大小写敏感)。
asp中默认session过期时间为20分钟,很多情况下不够,今天有客户要求很多就要重新登录了,所以准备了这篇文章,方便需要的朋友。
如果程序中没有设置session的过期时间,那么session过期时间就会按照IIS设置的过期时间来执行,IIS中session默认过期时间为20分钟,IIS中session时间可以更改时间设置要放在前面例如Session.Timeout=30 'SEESION有效时间为30分钟Session("ID")=Rs("id")Session("Name")=Rs("Name")Session("Pass")=Rs("Pass"利用Session.Timeout 属性设置超时时限对于一个登录到ASP 应用程序的用户,如果用户在系统默认的时间内未进行其它任何操作,当设置的时间一到便自动撤销这个用户的Session,这样就可以防止系统的资源被浪费。
Session 对象的TimeOut 属性可以用来设置“过期时间”,已分钟为单位,其设置格式为:代码如下:Session.TimeOut=MaxTime实例代码:(5.asp)页面,本实例说明如何控制会话的结束。
代码如下:<%@ language="vbscript" %><% session.timeout=60 %><html><head><title>控制会话的结束时间</title><head><body><%who = Session.SessionIDCurrentPage=Request.ServerVariables("SCRIPT_NAME")Response.AppendT olog who & ":" & CurrentPageResponse.write "<center>你的会话标识为:" & who & "<p>"Response.write "你当前访问的页面路径为:" & CurrentPage & "<p>"if Session("I")="" thensession("i")=1elsesession("i")=session("i")+1end ifSession.AbandonResponse.write "本页面被你刷新了" & Session("i") & "次。
Session的有效期设置⽅式⼀:在web.xml中设置session-config如下:<session-config><session-timeout>2</session-timeout></session-config>即客户端连续两次与服务器交互间隔时间最长为2分钟,2分钟后session.getAttribute()获取的值为空API信息:session.getCreationTime() 获取session的创建时间session.getLastAccessedTime() 获取上次与服务器交互时间session.getMaxInactiveInterval() 获取session最⼤的不活动的间隔时间,以秒为单位120秒。
<!-- 登录状态过滤,可以过滤掉不需要进⾏超时验证的url --><filter><filter-name>loginFilter</filter-name><filter-class>com.software.filter.LoginFilter</filter-class></filter><filter-mapping><filter-name>loginFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!---以上代码指明具体的路径,具体的代码见附录>⽅式⼆:在Tomcat的/conf/web.xml中session-config,默认值为:30分钟<session-config><session-timeout>30</session-timeout></session-config>⽅式三:在Servlet中设置HttpSession session = request.getSession();session.setMaxInactiveInterval(60);//单位为秒说明:1.优先级:Servlet中API设置 > 程序/web.xml设置 > Tomcat/conf/web.xml设置2.若访问服务器session超时(本次访问与上次访问时间间隔⼤于session最⼤的不活动的间隔时间)了,即上次会话结束,但服务器与客户端会产⽣⼀个新的会话,之前的session⾥的属性值全部丢失,产⽣新的sesssionId3.客户端与服务器⼀次有效会话(session没有超时),每次访问sessionId相同,若代码中设置了session.setMaxInactiveInterval()值,那么这个session的最⼤不活动间隔时间将被修改,并被应⽤为新值。
当用户在应用程序的页之间跳转时,存储在Session 对象中的变量不会清除,而用户在应用程序中访问页面时,这些变量始终存在。
当用户请求来自应用程序的Web 页时,如果该用户还没有会话,则Web 服务器将自动创建一个Session 对象。
当会话过期或被放弃后,服务器将终止该会话。
通过向客户程序发送唯一的Cookie 可以管理服务器上的Session 对象。
当用户第一次请求ASP 应用程序中的某个页面时,ASP 要检查HTTP 头信息,查看是否有在报文中有名为ASPSESSIONID 的Cookie 发送过来,如果有,则服务器会启动新的会话,并为该会话生成一个全局唯一的值,在把这个值作为新ASPSESSIONID Cookie 的值发送给客户端,正是使用这种Cookie,可以访问存储在服务器上的属于客户程序的信息。
Session 对象最常见的作用就是存储用户的首选项。
例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session 对象中。
另外其还经常被用在鉴别客户身份的程序中。
要注意的是,会话状态仅在支持cookie 的浏览器中保留,如果客户关闭了Cookie 选项,Session 也就不能发挥作用了。
(一)Session的基本属性:一、属性1、SessionIDSessionID 属性返回用户的会话标识。
在创建会话时,服务器会为每一个会话生成一个单独的标识。
会话标识以长整形数据类型返回。
在很多情况下SessionID 可以用于WEB 页面注册统计。
2、TimeOutTimeout 属性以分钟为单位为该应用程序的Session 对象指定超时时限。
如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。
二、方法Session 对象仅有一个方法,就是Abandon,Abandon 方法删除所有存储在Session 对象中的对象并释放这些对象的源。
如果您未明确地调用Abandon 方法,一旦会话超时,服务器将删除这些对象。
session过期时间设置说明一.系统session配置说明针对承保(prpall)、双核(undwrt)系统中,有两个配置文件可以设置session的过期时间分别是web.xml和weblogic.xmlWeb.xml中配置<session-config><session-timeout>60</session-timeout></session-config>时间单位是一分钟,并且只能是整数,如果是零或负数,那么会话就永远不会超时。
此例表示Session将在60分钟后过期weblogic.xml中设置的TimeoutSecs属性值。
Weblogic.xml中配置<session-param><param-name>TimeoutSecs</param-name><param-value>1800</param-value></session-param>时间单位是一秒钟,表示1800秒后失效。
1.如果两个配置文件中都有配置,且Weblogic.xml中配置的秒数必须可以被60整除,(如60,120等)。
则按照时间最小的那个为准。
2.如果两个配置文件中都有配置,且Weblogic.xml中配置的秒数必须不可以被60整除(如,45,90等)。
则以web.xml设置的时间为准。
3.如果web.xml文件中没有设置,且Weblogic.xml中有配置。
则按照Weblogic.xml 的设置为准。
4.为保证session的唯一性,在weblogic环境下,建议只在weblogic.xml中设置。
防止出现冲突。
二.疑问1.web.xml,weblogic.xml同时配置时,为什么会是以时间小的为准?暂时无解。
2.对应的weblogic.xml 必须配置为分钟的整数倍?如web=2m weblogic=90s,最终为以web为准。
ASP Session对象Application对象存储的信息对于连接到该应用程序的所有用户都是全局或者可访问的。
但是,有时切需要存储指定给每个用户的值,而不必通过给这些值分配名字指明其属于哪个用户。
这就需要用到Session对象。
Session对象可以存储特定的用户会话所需要的信息。
当用户在应用程序的页面之间跳转时,存储在Session对象中的变量不会被清除。
当用户请求来自Web应用程序的页面时,如果该用户尚未与Web应用程序建立会话,则Web服务器会自动建立一个Session对象。
当会话过期或者被放弃后,服务器将终止该会话。
1 Session对象属性Session对象提供的属性,包括Timeout属性、SessionID属性、LCID属性和C odePage属性,等等。
1.Timeout属性Session对象的Timeout属性用来设置Session的最长时间间隔,这里所谓的时间间隔是指服务器端从最近一次向Web服务器提出要求到下一次向Web服务器提SessionID属性可为每个用户返回一个唯一的ID。
此ID由服务器生成,是一个服务器会自动生成ID,结果如下:3.LCID属性LCID属性可设置或者返回一个规定位置或者地区的整数。
诸如日期、时间以及货币等内容都会根据位置或者地区来显示。
4.CodePage属性由于用户来自世界各地,无法事先编写各种不同的版本,所以ASP的Session 对象提供CodePage属性。
CodePage属性表示字符串编码及转换的依据。
代码页是一个可以包括数字、标点符号以及其他字母的字符集。
对于不同的语言和地区可以使用不同的代码页。
例如,ANSI代码页1252用于美国、英语和大多数欧洲语言,代码页932用于日文字,简体中文的代码页为936。
2 Session对象方法Session对象允许从用户会话空间删除指定值,并根据需要终止会话。
Session 对象提供了三种方法:Contents.Remove方法、Contents.RemoveAll方法和Abandon 方法。
php如何设置⼀个严格控制过期时间的session1.php session 有效期PHP的session有效期默认是1440秒(24分钟),如果客户端超过24分钟没有刷新,当前session会被回收,失效。
当⽤户关闭浏览器,会话结束,session也会失效。
可以修改php.ini的session.gc_maxlifetime来设置session的⽣命周期,但并不能保证在超过这⼀时间后session信息⽴即会删除。
因为GC是按机率启动的,可能在某⼀个长时间内都没有被启动。
那么⼤量的session在超过session.gc_maxlifetime后仍然有效。
2.session.gc_maxlifetime,session.gc_probability,session.gc_divisor说明session.gc_maxlifetime = 30 表⽰当session⽂件在30秒后没有被访问,则视为过期session,等待GC回收。
GC进程调⽤的概率是通过session.gc_probability/session.gc_divisor计算得来的,⽽session.gc_divisor默认是1000,如果session.gc_probability = 1000,那么GC进程在每次执⾏session_start()时都会调⽤,执⾏回收。
把session.gc_probability/session.gc_divisor的机率提⾼,会有帮助,但会对性能造成严重影响。
3.严格控制session过期⽅法1.使⽤memcache/Redis来保存session,设置过期时间,因为memcache/redis的回收机制不是按机率的,可以确保session过期后失效。
2.只使⽤php实现,创建⼀个session类,在session写⼊时,把过期时间也写⼊。
读取时,根据过期时间判断是否已过期。
<?php/*** Session控制类*/class Session{/*** 设置session* @param String $name session name* @param Mixed $data session data* @param Int $expire 超时时间(秒)*/public static function set($name, $data, $expire=600){$session_data = array();$session_data['data'] = $data;$session_data['expire'] = time()+$expire;$_SESSION[$name] = $session_data;}/*** 读取session* @param String $name session name* @return Mixed*/public static function get($name){if(isset($_SESSION[$name])){if($_SESSION[$name]['expire']>time()){return $_SESSION[$name]['data'];}else{self::clear($name);}}return false;}/*** 清除session* @param String $name session name*/private static function clear($name){unset($_SESSION[$name]);}}>demo:<?phpsession_start();$data = '123456';session::set('test', $data, 10);echo session::get('test'); // 未过期,输出sleep(10);echo session::get('test'); // 已过期>以上就是本⽂的全部内容,希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,同时也希望多多⽀持!。
Session丢失问题原因及解决方案本文分析了 Session丢失问题的原因及解决方案。
asp的Session是具有进程依赖性的。
ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。
正常操作情况下会有 Session丢失的情况出现。
因为程序是在不停的被操作,排除Session超时的可能。
另外,Session超时时间被设定成60分钟,不会这么快就超时的。
现在我就把原因和解决办法写出来。
Session丢失原因:由于程序是默认配置,所以Web.Config文件中关于Session的设定如下:< sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes'cookieless='true' timeout='60'/>我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer?SQLServer(大小写敏感)。
默认情况下是InProc,也就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。
哪些情况下该进程会重起呢?微软的一篇文章告诉了我们:1、配置文件中processModel标签的memoryLimit属性2、Global.asax或者Web.config文件被更改3、Bin文件夹中的Web程序(DLL)被修改4、杀毒软件扫描了一些.config文件。
更多的信息请参考PRB: Session variables are lost intermittently in applications Session丢失解决办法:前面说到的sessionState标签中mode属性可以有三个取值,除了InProc之外,还可以为StateServer、SQLServer。
session过期(心跳处理方法)有时候大家不希望session过一会提示session超时还需要重新登录下面给大家介绍个简单方法:添加心跳的方法 1.在公用页面中添加:<iframe id='member_topjump'src='${pageContext.request.contextPath}/jsp/backend.jsp' style='display:none'></iframe>一般都是向top类似的页面中或public.jsp那样页面中添加2.backend.jsp' 源码很简单:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN""/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="/1999/xhtml"><head><title>Comet php backend</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Cache-Control"CONTENT="no-store"/> <meta http-equiv="Pragram" CONTENT="no-cache"/> <meta http-equiv="Expires"CONTENT="no-store"/> <meta http-equiv="Refresh" CONTENT="300"/> </head> <body> <% out.println("<script type=\"text/javascript\">");out.println ("</script>");//System.out.println("----------------------"+(System.currentTime Millis()/1000));out.flush(); // used to send the echoed data to the client %> </body> </html> 新市场营销法则助推企业成长电子商务营销食品餐饮营销建筑房产营销消费品营销。
在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户没有使用系统一定时间后,自动退出登录,销毁session。
具体设置很简单:在主页面或者公共页面中加入:session.setMaxInactiveInterval(900);参数900单位是秒,即在没有活动15分钟后,session将失效。
这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。
所以如果是在调试程序,应该是修改服务器端时间来测试,而不是客户端。
在一般系统中,也可能需要在session失效后做一些操作,(1)控制用户数,当session失效后,系统的用户数减少一个等,控制用户数在一定范围内,确保系统的性能。
(2)控制一个用户多次登录,当session有效时,如果相同用户登录,就提示已经登录了,当session失效后,就可以不用提示,直接登录了那么如何在session失效后,进行一系列的操作呢?这里就需要用到监听器了,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序,就可以了。
监听器类为:HttpSessionListener类,有sessionCreated和sessionDestroyed两个方法自己可以继承这个类,然后分别实现。
sessionCreated指在session创建时执行的方法sessionDestroyed指在session失效时执行的方法给一个简单的例子:public class SessionListener implements HttpSessionListener{public void sessionCreated(HttpSessionEvent event) { HttpSession ses = event.getSession();String id=ses.getId()+ses.getCreationTime(); erMap.put(id, Boolean.TRUE); //添加用户}public void sessionDestroyed(HttpSessionEvent event) { HttpSession ses = event.getSession();String id=ses.getId()+ses.getCreationTime();synchronized (this) {ERNUM--; //用户数减一erMap.remove(id); //从用户组中移除掉,用户组为一个map}}然后只需要把这个监听器在web.xml中声明就可以了例如:<listener><listener-class>com.summer.kernel.tools.SessionListener</listener-class></listener>补充:具体设置很简单,方法有三种:(1)在主页面或者公共页面中加入:java 代码1.HttpSession ses = request.getSession();2.ses.setMaxInactiveInterval(10);session.setMaxInactiveInterval(900);参数900单位是秒,即在没有活动15分钟后,session将失效。
session.timeout方法一: Session的默认时间设置20分钟,即超过20分钟后,器会自动放弃Session信息.当们在程序中打webconfig的时候,可以看到一段如下的代码:程序代码: sessionState节放在节下,形式如下:configuration 元素(常规设置架构)system.web 元素( 设置架构)sessionState 元素( 设置架构)上面一段的代码就配置应用程序如何存储Session信息的了.其中的timeout="20"即为 session的默认时间.需要更改时间们在此处填上不同的数值就可以了,默认单位为分.sessionState节属性:必须有的属性mode 设置将Session信息存储到哪里Off 设置为不使用Session功能InProc 设置为将Session存储在进程内,就ASP中的存储,这默认值。
StateServer 设置为将Session存储在独立的状态中。
SQLServer 设置将Session存储在SQL Server中可选的属性:cookieless 设置客户端的Session信息存储到哪里ture 使用Cookieless模式false 使用Cookie模式,这默认值。
timeout 设置经过多少分钟后器自动放弃Session信息。
默认为20分钟stateConnectionString 设置Session信息存储在状态中时使用的器名称和端口号,例如:"t cpip=127.0.0.1:42424”。
当mode的值StateServer,这个属性必需的。
sqlConnectionString 设置与SQL Server连接时的连接字符串。
当mode的值SQLServer时,这个属性必需的。
stateNetworkTimeout 设置当使用StateServer模式存储Session状态时,经过多少秒空闲后,断Web器与存储状态信息的器的TCP/IP连接的。
关于Session过期问题及其解决办法1.⽬录删除及重命名操作 :如果你发现session突然⽆理由的丢失,⽽当你认真的检查代码并且排除其它常规可能丢失的可能性时,你可能会像我⼀样,⼏乎要接近崩溃~!后来发现问题出在我⽤代码创建⼀个临时⽬录然后删除临时⽬录的删除操作上。
现在和⼤家分享下:希望对碰到类似钉⼦的朋友有⽤。
说⽩了session丢失实质就是:应⽤程序重起!应⽤程序什么时候⾃动重起呢?请参考:也就是说 会监视应⽤程序⽬录,⼀但有被监视的动作发⽣(⽐如:修改了config、重命名⽬录等)应⽤程序就会⾃动重起当然这时你的session⼀定丢失了。
如果避免不了这种操作(如:重命名⽬录);这⾥我们可以⽤cookie存信息或存到数据库去;注意:除了以上列出的英⽂条件外。
⽬录的删除操作⼀定丢失session。
的内部机制对待⽬录有点像个守财奴,它死守着⽬录,你创建它不会管(往⾥加),⼀但创建他就会监视该⽬录,若你要删除或重命名它的(动它的⽬录),它就发⽣重起了。
2.Frame中关于Session丢失在开发中,我们经常会遇到使⽤Frame来⼯作,⽽且有时是为了跟其他⽹站集成,应⽤到多域的情况下,⽽Iframe是不能保存Session的。
因此,⽹上可以找到很多相关的⽂章,如果⽹站可以采⽤设置Web.Config中的配置:<sessionStatemode="StateServer"stateConnectionString="tcpip=127.0.0.1:42424"sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"cookieless="false"timeout="40"/>把cookieless="false"改成"true"就可以了。
一、Session 对象可以使用Session 对象存储特定用户会话所需的信息。
这样,当用户在应用程序的Web 页之间跳转时,存储在Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
当用户请求来自应用程序的Web 页时,如果该用户还没有会话,则Web 服务器将自动创建一个Session 对象。
当会话过期或被放弃后,服务器将终止该会话。
Session 对象最常见的一个用法就是存储用户的登录信息或者用户设置。
例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session 对象中。
注意:会话状态仅在支持cookie 的浏览器中保留。
语法Session的集合|属性|方法:1.集合Contents 包含已用脚本命令添加到会话中的项目。
StaticObjects 包含通过<OBJECT> 标记创建的并给定了会话作用域的对象。
2.属性CodePage 将用于符号映射的代码页。
LCID 现场标识。
SessionID 返回用户的会话验证。
Timeout 应用程序会话状态的超时时限,以分钟为单位。
3.方法Abandon 该方法破坏Session 对象并释放其资源。
4.事件global.asa 文件中声明下列事件的脚本。
Session_OnEndSession_OnStart注:global.asa 文件只有在网站根目录时才有效.举例:可以在Session 对象中存储值。
存储在Session 对象中的信息在会话及会话作用域内有效。
下列脚本演示两种类型的变量的存储方式。
<%Session("username") = "Janine"Session("age") = 24%>但是,如果将对象存储在Session对象中,而且使用VBScript 作为主脚本语言。
则必须使用关键字Set。
如下列脚本所示。
<% Set Session("Obj1") = Server.CreateObject("MyComponent.class1") %>然后,就可以在后面的Web 页上调用MyComponent.class1 揭示的方法和属性,其调用方法如下:<% Session("Obj1").MyMethod %>也可以通过展开该对象的本地副本并使用下列脚本来调用:<%Set MyLocalObj1 = Session("Obj1")MyLocalObj1.MyObjMethod%>创建有会话作用域的对象的另一种方法是在global.asa 文件中使用<OBJECT> 标记。
1.目录删除及重命名操作 :如果你发现session突然无理由的丢失,而当你认真的检查代码并且排除其它常规可能丢失的可能性时,你可能会像我一样,几乎要接近崩溃~!后来发现问题出在我用代码创建一个临时目录然后删除临时目录的删除操作上。
现在和大家分享下:希望对碰到类似钉子的朋友有用。
说白了session丢失实质就是:应用程序重起!应用程序什么时候自动重起呢?请参考:Anand在发表的文章也就是说 会监视应用程序目录,一但有被监视的动作发生(比如:修改了config、重命名目录等)应用程序就会自动重起当然这时你的session一定丢失了。
如果避免不了这种操作(如:重命名目录);这里我们可以用cookie存信息或存到数据库去;注意:除了以上列出的英文条件外。
目录的删除操作一定丢失session。
的内部机制对待目录有点像个守财奴,它死守着目录,你创建它不会管(往里加),一但创建他就会监视该目录,若你要删除或重命名它的(动它的目录),它就发生重起了。
2.Frame中关于Session丢失在开发中,我们经常会遇到使用Frame来工作,而且有时是为了跟其他网站集成,应用到多域的情况下,而Iframe是不能保存Session的。
因此,网上可以找到很多相关的文章,如果网站可以采用设置Web.Config中的配置:<sessionState mode="StateServer"stateConnectionString="tcpip=127.0.0.1:42424"sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false"timeout="40"/>把cookieless="false"改成"true"就可以了。
C#中设置session过期的时间【**需进一步跟进**】 默认配置下,Session莫名丢失的原因及解决办法正常操作情况下Session会无故丢失。
因为程序是在不停的被操作,排除Session超时的可能。
另外,Session超时时间被设定成60分钟,不会这么快就超时的。
这次到CSDN上搜了一下帖子,发现好多人在讨论这个问题,然后我又google了一下,发现微软网站上也有类似的内容。
现在我就把原因和解决办法写出来。
原因:由于程序是默认配置,所以Web.Config文件中关于Session的设定如下:<sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='datasource=127.0.0.1;Trusted_Connection=yes' cookieless='true' timeout='60'/>我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer?SQLServer(大小写敏感)。
默认情况下是InProc,也就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。
哪些情况下该进程会重起呢?微软的一篇文章告诉了我们:1、配置文件中processModel标签的memoryLimit属性2、Global.asax或者Web.config文件被更改3、Bin文件夹中的Web程序(DLL)被修改4、杀毒软件扫描了一些.config文件。
更多的信息请参考PRB: Session variables are lost intermittently in applications解决办法:前面说到的sessionState标签中mode属性可以有三个取值,除了InProc之外,还可以为StateServer、SQLServer。
如何解决ASP中session失效问题ession是ASP中的一个重要对象,用于存储特定的用户会话所需的信息。
session中文是“会话”的意思,在ASP中代表了服务器与客户端之间的“会话”。
session的作用时间从用户到达某个特定的Web页开始,到该用户离开Web站点,或在程序中利用代码终止某个session结束。
引用session则可以让一个用户访问多个页面之间的切换也会保留该用户的信息。
系统为每个访问者都设立一个独立的session对象,用以存储session 变量,并且各个访问者的session对象互不干扰。
在《网页制作》教学中,我设计了这样一个任务:设计一个会员登录模块,会员分为一、二、三个级别,登录后,不同级别的会员在购买商品时可享受不同的折扣。
在实现模块功能时,就用到了session对象。
然而,当某个会员登录并成功购买了一个商品后,当“再购买”行为发生时,系统却不能正确给出折扣。
为什么?仔细分析模块中的两个页面,即登录页面login.asp和购买页面buy.asp的关系:登录页面将会员的“级别”等信息保存在session中,购买页面则从session中获得会员“级别”等信息,进而在价格上给予对应折扣。
“再购买”不能识别会员级别,显然是因为session失效了。
如何解决这个问题?我尝试了下面几种办法。
1 修改timeout属性值ession对象的timeout属性用来设置session会话的超时时间,以分钟表示,默认值为20分钟。
当timeout属性设置的时间值耗尽后,会话资源将被释放。
通过timeout属性破坏session对象,避免了session对象在服务器中无限制地产生,保护了服务器资源。
但是,在实际Web应用程序开发中,常常遇到如上述会员“再购买”中出现的session失效现象,导致用户状态信息丢失而致使应用流程无法正常完成的问题。
因此,在登录页面中,我加入了下面的代码:timeout=1000然而,同一用户依然不能在“再购买”中获得该享有的折扣,也就是session失效问题并没有解决。
asp中默认session过期时间为20分钟,很多情况下不够,今天有客户要求很多就要重新登录了,所以准备了这篇文章,方便需要的朋友。
如果程序中没有设置session的过期时间,那么session过期时间就会按照IIS设置的过期时间来执行,IIS中session默认过期时间为20分钟,IIS中session时间可以更改时间设置要放在前面例如Session.Timeout=30 'SEESION有效时间为30分钟Session("ID")=Rs("id")Session("Name")=Rs("Name")Session("Pass")=Rs("Pass"利用Session.Timeout 属性设置超时时限对于一个登录到ASP 应用程序的用户,如果用户在系统默认的时间内未进行其它任何操作,当设置的时间一到便自动撤销这个用户的Session,这样就可以防止系统的资源被浪费。
Session 对象的TimeOut 属性可以用来设置“过期时间”,已分钟为单位,其设置格式为:代码如下:Session.TimeOut=MaxTime实例代码:(5.asp)页面,本实例说明如何控制会话的结束。
代码如下:<%@ language="vbscript" %><% session.timeout=60 %><html><head><title>控制会话的结束时间</title><head><body><%who = Session.SessionIDCurrentPage=Request.ServerVariables("SCRIPT_NAME")Response.AppendTolog who & ":" & CurrentPageResponse.write "<center>你的会话标识为:" & who & "<p>"Response.write "你当前访问的页面路径为:" & CurrentPage & "<p>"if Session("I")="" thensession("i")=1elsesession("i")=session("i")+1end ifSession.AbandonResponse.write "本页面被你刷新了" & Session("i") & "次。
</centr>"%>应用中,很多人会遇到Session过期设置有冲突。
其中,可以有四处设置Session 的过期时间:一、全局网站(即服务器)级IIS-网站-属性--编辑配置-状态管理-会话超时(分钟)-设置为120,即为2小时,即120分钟后如果当前用户没有操作,那么Session就会自动过期。
二、网站级IIS-网站-具体网站(如DemoSite)-属性-,此时有两个选项,一个是“编辑全局配置”,一个是“编辑配置”。
如果“编辑全局配置”,就和上个配置一样。
如果“编辑配置”,则只对当前网站生效。
因为一个服务器可能有很多独立网站。
1、继续选择“状态管理”-会话超时(分钟)-设置为360,即360分钟。
效果同上,只不过只对当前网站生效。
2、身份认证-Forms-Cooke超时,选择"12:00:00",即12个小时。
可选项共有以下八项:00:15:0000:30:0001:00:0002:00:0004:00:0008:00:0012:00:001:00:00:00即最长24小时,最小15分钟。
这是默认的配置。
在应用中可以自由定制。
三、应用程序级同网站管理,只不过作用域仅限当前应用程序。
四、页面级在某页面中,设置Session.Timeout = 30;即可临时修改某页面的会话过期时间。
查看某个Session的过期时间,可以用代码如下:TimeSpan SessTimeOut = new TimeSpan(0, 0,System.Web.HttpContext.Current.Session.Timeout, 0, 0);TimeSpan SessTimeOut = new TimeSpan(0, 0,System.Web.HttpContext.Current.Session.Timeout, 0, 0);其中,二和三的设置,体现在Web.config中即:view plaincopy to clipboardprint?<?xml version="1.0"?><configuration><system.web><authentication mode="Forms" ><forms name="AuthLogin" loginUrl="/Login.aspx" protection="All" timeout="360" slidingExpiration="true"/></authentication><sessionState mode="InProc" cookieless="false" timeout="20" /></system.web><location path="Login.aspx"><system.web><authorization><allow users="*" /></authorization></system.web></location></configuration><?xml version="1.0"?><configuration><system.web><authentication mode="Forms" ><forms name="AuthLogin" loginUrl="/Login.aspx" protection="All" timeout="360" slidingExpiration="true"/></authentication><sessionState mode="InProc" cookieless="false" timeout="20" /></system.web><location path="Login.aspx"><system.web><authorization><allow users="*" /></authorization></system.web></location></configuration>以上四处设置的优先级为页面级>应用程序级>网站级>服务器级。
换句话说,如果页面设置为20分钟,网站设置为120分钟,那么,显然以20分钟为生效的过期时间。
另外一个值得注意的地方。
在设置二处,设置会话超时(SessionState)120分钟,而同时用forms认证,设置为“00:15:00”,即15分钟,并且slidingExpirationo为false,则真正生效的Session过期时间是多少呢?有效的结果是SessionState的设置,即120分钟。
如果有设置Session过期时间没有生效的,请检查以上几处配置网上找到的其它方法1、操作系统:Widnows Server 2003步骤:开始——〉管理工具——〉Internet信息服务(IIS)管理器——〉网站——〉默认网站——〉右键“属性”——〉主目录——〉配置——〉选项——〉启用会话状态——〉会话超时(在这儿设置你要的超时时间,单位分钟)。
确定即可。
2、应用程序中Session过期时间的设置在这样的Web应用中,Session是用来保存用户状态的常用手段,不过由于服务器内存空间是有限的,所以Session过期时间设置是很有必要的。
在中如何设置Session的过期时间呢,很简单,修改web.config配置。
具体修改方法如下,在web.config中进行如下配置<system.web><sessionState mode="InProc" timeout="30"/></system.web>在这里指的是Session过期时间为30分钟。
也就是说30分钟后如果当前用户没有操作,那么Session就会自动过期了。
3、在调用Session的cs页中,Load事件里面写以下Session.Timeout = 30;4、Store session in state service<sessionState cookieless="false" timeout="480" mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;user id=sa;password=" />。