如何使Session永不过期

转载:http://blog.csdn.net/wygyhm/article/details/2819128

先说明情况:公司做监控系统,B/S结构,主要用在局域网内部!监控系统开机可能要开好长时间,管理员的ID 和权限等是写在Session里的——我想不用Cookies的原因可能是Cookies不是很安全,还有就是局域网内,只是几台机子访问服务器, Session没有几个,所以即使总保持着Session也不会太占用资源,最起码服务器能承受的起。

保持Session的方法:有人说设session.timeout=-1,或小于0的数。这种方 法肯定是不行的,session计算时间以分钟为单位,必须是大于等于1的整数。又有人说设session.timeout=99999。这种同样不行, session有最大时间限制。我经过测试发现最大值为24小时,也就是说你最大可以session.timeout=1440,1441都是不可以有, 呵呵。本人测试环境:win2003+IIS6.0+ASP3.0。
所以想通过设session.timeout的过期时间让session永不过期是不可能的。写到Cookies里是比较好的方法,网上也有很多这样的教 程,这里就不再说了!还有就是用在要保持session的页里设隐藏iframe每隔一段时间(这个时间小于session.timeout的时间)把涮 新一次frame里的空页面!实现方法如下:

在要保持session页里加上: 
<iframe width=0 height=0 src="SessionKeeper.asp">
</iframe>

同目录下建一下SessionKeeper.asp的文件。 
<html>
<head>
  <meta http-equiv="Refresh" content="900000;url=sessionKeeper.asp"> 
  <!--每隔900秒刷新一下自己,为了和服务器通讯一下,保持session不会丢-->
</head>
</html>

这种方法还是比较长见的,另外还有一种和上面类似的方法,不过他不是用meta自动涮新嵌套的iframe的方法。他是用javascript: window.setTimeout("functionname()",10000);第隔一段时间时间自动调用一个函数的方法,当然函数里还是要去连接一个空的文件。具体方法如下:

在要保持session面里加上: 
<script  id=Back  language=javascript></script>
<script language=javascript>
 function keepsession(){
  document.all["Back"].src="SessionKeeper.asp?RandStr="+Math.random();
  //这里的RandStr=Math.random只是为了让每次back.src的值不同,防止同一地址刷新无效的情况
  window.setTimeout("keepsession()",900000);  //每隔900秒调用一下本身
  }
 keepsession();
</script>
这样同一目录下建一个空内容的sessionKeeper.asp就文件就可以了!

问题没有解决:通过以上的方法Session保持应该没有问题了,IIS默认无请求的清除session的值为20分钟,我设的每次交互服务的时间都远远小于这个值,可是我大概过个一天多的时间,session还是无缘无故的没了!郁闷。

后来在网上多方查找终于找到答案:原来IIS为了保护服务器,有一个“回收”的概念!测试了半天终于有了点大体了解(不要笑我菜^-^)。先来看看这个“回收”在哪设置。

启动IIS管理器->应用程序池->右键->属性->回收选项卡,有一项是默认就起作用的,就是第一项:“回收工作进程(分 钟)”默认值1740分钟,大约29个小时。他是什么意思呢?我个人理解:在session.timeout之后再过1740分钟自动把所有仍在保持的session清除。这个值最大可设为4000000,大概是2700多天!我直接取消了,不用他自动回收!问题终于解决。

另外这个属性对话框中还有其它几项:第二项应该是连接的用户超过了一定数目回收。第三项是到某一个时间就自动回收。在“性能”选项卡中“在空闲此时间段后 关闭工作进程”,这里就是设置IIS默认session.timeout时间的地方了。默认值20分钟,这里同样最大值可设为4000000,和在ASP 页中设置session.timeout最大值为1440不同。在这里设置超过大于1440的值是否起作用,我没作测试,我想应该是可以的。那为什么在 ASP页中session.timeout的值最大只能是1440在IIS的属性中却能设的那么大呢?应该是属于一种保护机制:ASP页的 session.timeout的值哪个用户都可以设,IIS里却只有管理员可以设,两者的权限不同,所以设置的范围就不同了。

如何使Session永不过期

时间: 2024-11-05 23:22:28

如何使Session永不过期的相关文章

PHP中的session永不过期的解决思路及实现方法分享

打开php.ini设置文件,修改三行如下: 1.session.use_cookies  把这个的值设置为1,利用cookie来传递sessionid  2.session.cookie_lifetime  这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以PHP的 session不能永久使用! 那么我们把它设置为一个我们认为很大的数字吧,999999999怎么样,可以的!就这样.  3.session.gc_maxl

session设置过期的方法(转载)

这篇文章主要介绍了php中实现精确设置session过期时间的方法,需要的朋友可以参考下 大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下session过期时间. 对此,可以在PHP中,设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟) 这里你可以随便设置一下过期时间.但是有人说设置以后,好象不起作用! 其实不是不起作用,而是因为系统默认: ? 1 2 session.gc

设置php脚本永不过期

在Linux下运行2个php脚本:queue.php,worker.php queue.php,worker.php 2个脚本实现的功能:接收&&处理日志信息 应用程序发送日志信息是不定时的,但是queue,worker必须是常驻进程,一直开启等待接收&&处理信息,需要一直执行 在putty上操作运行脚本,但是由于session会过期导致,php中断执行,想要php脚本一直运行,有2个方法 1.如果你的代码已经成熟了,你可以直接把php脚本开成守护进程,让脚本一直运行 开启

oracle如何修改单个用户密码永不过期

Oracle的密码过期规则是用Profile来管理的,系统默认只有一个Profile(DEFAULT),该profile的密码过期规则为180天:而所有的用户都使用该DEFAULT的profile,所以如果修改DEFAULT的过期规则会影响所有的用户.如果你想修改某个用户的密码让其永不过期,则需要新建一个profile,修改该profile的过期规则为无限期,这样该用户的过期规则会改变,并且不会影响到其他用户. 首先查看用户的proifle是哪个,一般是default: sql>SELECT u

【微信】微信获取TOKEN,以及储存TOKEN方法,Spring quartz让Token永不过期

官网说明 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留512个字符空间.access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效. 公众平台的API调用所需的access_token的使用及生成方式说明: 1.为了保密appsecrect,第三方需要一个access_token获取和刷新的中控服务器.而其他业务逻辑服务器所

Office 365之MsolUser用户密码永不过期

今天就简单的说一下如何在O365 PowerShell 配置用户密码永不过期. 首先我们要下载一个组件,分别叫做适用于 IT 专业人员的 Microsoft Online Services 登录助手 RTW和用于 Windows PowerShell 的 Azure Active Directory 模块 适用于 IT 专业人员的 Microsoft Online Services 登录助手 RTW下载地址:https://www.microsoft.com/zh-CN/download/det

ThinkPHP中:检查Session是否过期

1.创建Session 1 public function index(){ 2 $sess_time=time(); 3 session('name','andy'); 4 session('time_stamp',$sess_time); 5 } 2.检查Session是否过期 1 /** 2 * 检查Session是否过期(30分钟) 3 */ 4 public function checkSessTime(){ 5 if (!$_SESSION) { 6 header('content-

彻底解决PHP Session不过期以及SessionId保持不变的问题

用过asp.net里面的session再用过php里面的session,你会觉得php 的session相比asp.net里面的session是如此的不爽.在用php的session,你可能会遇到session不失效,关掉浏览器session还存在,重新打开浏览器sessionid还和以前一样等问题... 下面我们就来看下php的session机制: session 回收机制: PHP采用Garbage Collection process对过期session进行回收,然而并不是每次sessio

关于session的过期时间的方法

session的的过期时间的设置,通用的三种方法: 1.  直接在后台代码中设计,使用session.setMaxInactiveInterval(60*60); 注意这个时间的单位是秒,60*60就是一小时. 如果将时间设置为负数,则表示用不过期. 2.在项目的web.xml文件中添加配置过期时间的代码即可. <session-config> <session-timeout>400</session-timeout> </session-config>