想请问一个我认为比较难的问题,在不关闭浏览器的情况下怎样才能让session永不过期?

时间:2022-10-15 10:15:21
csdn这个就是,我的网页打开都两天了,照样还可以发表问题,不知道他是怎么做的。

30 个解决方案

#1


将Session.Timeout设为负数可不可以?

#2


一个本方法,但绝对有效
在页面中用IFRAME做一个帧,将它隐含(STYLE中的DISPLAY设为NONE),它的SRC设为一个页面A,页面A每隔N秒自动刷新

#3


session.timeout必须是正整数。
一个比较笨的方法就是在session快过期的时候刷新自身,
如果session.timeout是30分钟的话,在第29分钟的时候把自己刷新一下不就行了。

#4


CSDN好象也不是这样的,它的问题多着呢。有时候明明已经登录了,它却提示没有登录。
我有一天晚上没关机,第二天早上一来就想发贴子,结果它提示我盗用别人的帐号,还把我的密码自动给改了。faint.

#5


关注

#6


我觉用刷新方法不是太好,虽然我自已是这么做的。
原因是万一中途网络或服务器出了一点故障,导致了一次刷新失败,它就再也不会刷了。
还请高手继续指点,提出好的方法。

#7


只能用刷新,否则只能用cookie了

#8


不错不错,用cookie是个好方法。

#9


CSDN怎做的,我就不知道了!我以前写的一个论坛也可以打开后即使session过期也能发帖子!只要用form方式提交,不检验session就添加信息!但如果没有session就不可能出现提交表单!还需要让提交页面立即过期,且不保存在本地缓存中!用cookie可能不太可能,这样你不是每次都可以不登录就发帖子!而让session不变量不过期是不可能的,除非你不停刷新浏览器!因为你只在获取网页时才和服务器连接,获得网页后就断开!所以服务器并不知道你的机器是开,是关!想让session不过期只能不停刷新页面!如果能直接设置让session不过期,那服务器只能崩溃了!

#10


那csdn是怎么做的呢 ,请版主回答

#11


请问session和cookie有什么区别
还有session.timeout的默认时间是多些如果让session.timeout=240和话是不是就可以10天不过期了?

#12


cookie如果不设定过期时间,IE就不会把cookie写到硬盘上,而且只要IE没关这个cookie就存在

#13


偶见一文写道:设为负数,永不过期

#14


关注此问题!

#15


session和cookie可以同时用吗?

#16



session和cookie当然可以同时使用。

#17


用cookie吧

#18


Session.TimeOut=1200

#19


不关闭就刷新、刷新

#20


session.timeout=240是240分钟,不是10天!
Session.TimeOut=1200很容易让服务器崩溃!

#21


只好用Cook了,别的没有好办法

#22


用cook把

#23


自动刷新

#24


看得我都着急,呵呵。
刚好我没什么分数,恬颜来骗分吧。

1、前面有朋友说的设置Session.TimeOut,个人认为不是好办法(而Timeout = -1 我没试过)。但是不像有的朋友说的那样,会导致服务器崩溃——除非有很多访问者一直开着浏览器,导致“在线”session太多超出了服务器的承受极限。
2、cookie可以解决一定的问题。从技术上来说,IIS提供的Session其实就是依靠Cookie来实现的——你可以通过session.timeout修改Session的cookie的
超时时间。但是Session的cookie一旦关闭浏览器就自动终止了,所以除非用户像1所说那样一直开着浏览器——僵尸,呵呵。弄清楚这一点,你可以将cookie写入用户端,比如保存名字密码一天、一个月等等。这样做,需要考虑一定的安全风险——比如有很多用户在网吧,有用户共用一台电脑等等,需要设计一个比较完整的登录/退出登录机制。
3、刷新。无论如何,我是采用这样的方法的。楼上有朋友说到,可以用隐藏的frame来刷新。后来也有朋友说到,刷新如果失败就会停止。这都是正确的,不过有几种方式可以实现自动刷新:
第一种,ASP的 Response.AddHeader 方法,添加一个 REFRESH 的Header
第二种,html的<meta >,在html中输出
<meta http-equiv="Refresh" content="3;URL='keep.asp'">,其原理和上一个方法一样。
第三种,javaScript
    头三种方法都是一样的,依靠刷新。可是为什么会出现刷新失败就停止呢?呵呵,那是因为那位朋友的页面A去刷新自己,而促使页面A刷新自己的方法需要页面A自己来调用。也就是自己调用自己,一旦调用失败一次,就无法继续了——像递归一样。
如果在页面里面用javascript写一个setTimeout或者interval方法,让某个frame去不断刷新(刷新什么无所谓,保持连接就行),这样,只要该页面一直在就不过期咯。这样的方式比较适合BBS中或者聊天室的最上面的广告区域(所有页面可以共用的部分)。

4、不用iis的session,用自己的session。这要说说什么是Session“会话”了。会话这个概念不是iis才有,只是iis提供了这样的技术实现。用户连接到iis服务器,服务器随机生成一个不重复的key给用户浏览器,记到cookie中。同时,所有通过asp写入session对象的数据都保存在服务器端,至于谁能访问这些数据?取决于谁拿着正确的key——也就是该用户的浏览器。这一切,iis和浏览器在后台完成了,所以我们没注意到。正是为了做到神不知鬼不觉,iis选择了用cookie的方式偷偷的来回传递那个key,那么,如果浏览器关了cookie,Session也就失效了。如果我们自己做自己的Session,原理一样。在用户登录或者连接的时候分配一个key,保存到数据库,并定期或者在接到用户的请求的时候检查这个key是否已经过期。至于用什么方式传递这个key,就看方便了:可以用cookie,这样不容易被看到;可以写在web里面,用隐藏的form提交,这样比较麻烦;可以带在访问url的后面作为参数,这样看起来有点乱。但是好处在于:三种传参方式灵活使用,不依赖于cookie和iis的session,还可以在多台服务器之间保持“会话”。不过要这么做,应该在系统设计的时候就做出决定,因为有一定的技术和开发成本投入。
5、带着参数走
这就是上面方法的折衷版本,上面有朋友其实已经提到了。显示当前页面的时候,就把参数写到页面的隐藏的表单或者javascript变量,提交发言内容的时候,虽然iis的session过期了,但是需要的参数都还在。这样,就不用考虑用户的浏览器是否支持cookie。呵呵,不太好的地方还是一样的:有些敏感信息存在web的源代码中...

所以咯,遇到必须考虑过期问题的时候,我还是喜欢用javascript刷新方式。偷懒的话,就用cookie。不过我们的系统都有自己的Session,所以一般来说我只需要在页面里面或者url上带上SessionKey就好了。


附:csdn的程序员做事情还是有点懒,连个错误处理都没有,人家连存储过程都看到咯...不知道其它安全漏洞的有?嘿嘿

#25


看看

#26


joyplay(想吃老虎的小猪)

关于IIS的session的实现方法,哪里有详细的资料可以参考一下??谢谢
我在写一个web server,正在考虑这个问题呢

#27


刷,刷,刷,刷,刷,

#28


你做一个VB控件,将Session变量值赋给这控件,让它一直保留吧,哈哈。

#29


在IIS里设置SESSION的值,或勾掉SESSION选项

#30


在IIS具体什么位置,我怎么没找到

#1


将Session.Timeout设为负数可不可以?

#2


一个本方法,但绝对有效
在页面中用IFRAME做一个帧,将它隐含(STYLE中的DISPLAY设为NONE),它的SRC设为一个页面A,页面A每隔N秒自动刷新

#3


session.timeout必须是正整数。
一个比较笨的方法就是在session快过期的时候刷新自身,
如果session.timeout是30分钟的话,在第29分钟的时候把自己刷新一下不就行了。

#4


CSDN好象也不是这样的,它的问题多着呢。有时候明明已经登录了,它却提示没有登录。
我有一天晚上没关机,第二天早上一来就想发贴子,结果它提示我盗用别人的帐号,还把我的密码自动给改了。faint.

#5


关注

#6


我觉用刷新方法不是太好,虽然我自已是这么做的。
原因是万一中途网络或服务器出了一点故障,导致了一次刷新失败,它就再也不会刷了。
还请高手继续指点,提出好的方法。

#7


只能用刷新,否则只能用cookie了

#8


不错不错,用cookie是个好方法。

#9


CSDN怎做的,我就不知道了!我以前写的一个论坛也可以打开后即使session过期也能发帖子!只要用form方式提交,不检验session就添加信息!但如果没有session就不可能出现提交表单!还需要让提交页面立即过期,且不保存在本地缓存中!用cookie可能不太可能,这样你不是每次都可以不登录就发帖子!而让session不变量不过期是不可能的,除非你不停刷新浏览器!因为你只在获取网页时才和服务器连接,获得网页后就断开!所以服务器并不知道你的机器是开,是关!想让session不过期只能不停刷新页面!如果能直接设置让session不过期,那服务器只能崩溃了!

#10


那csdn是怎么做的呢 ,请版主回答

#11


请问session和cookie有什么区别
还有session.timeout的默认时间是多些如果让session.timeout=240和话是不是就可以10天不过期了?

#12


cookie如果不设定过期时间,IE就不会把cookie写到硬盘上,而且只要IE没关这个cookie就存在

#13


偶见一文写道:设为负数,永不过期

#14


关注此问题!

#15


session和cookie可以同时用吗?

#16



session和cookie当然可以同时使用。

#17


用cookie吧

#18


Session.TimeOut=1200

#19


不关闭就刷新、刷新

#20


session.timeout=240是240分钟,不是10天!
Session.TimeOut=1200很容易让服务器崩溃!

#21


只好用Cook了,别的没有好办法

#22


用cook把

#23


自动刷新

#24


看得我都着急,呵呵。
刚好我没什么分数,恬颜来骗分吧。

1、前面有朋友说的设置Session.TimeOut,个人认为不是好办法(而Timeout = -1 我没试过)。但是不像有的朋友说的那样,会导致服务器崩溃——除非有很多访问者一直开着浏览器,导致“在线”session太多超出了服务器的承受极限。
2、cookie可以解决一定的问题。从技术上来说,IIS提供的Session其实就是依靠Cookie来实现的——你可以通过session.timeout修改Session的cookie的
超时时间。但是Session的cookie一旦关闭浏览器就自动终止了,所以除非用户像1所说那样一直开着浏览器——僵尸,呵呵。弄清楚这一点,你可以将cookie写入用户端,比如保存名字密码一天、一个月等等。这样做,需要考虑一定的安全风险——比如有很多用户在网吧,有用户共用一台电脑等等,需要设计一个比较完整的登录/退出登录机制。
3、刷新。无论如何,我是采用这样的方法的。楼上有朋友说到,可以用隐藏的frame来刷新。后来也有朋友说到,刷新如果失败就会停止。这都是正确的,不过有几种方式可以实现自动刷新:
第一种,ASP的 Response.AddHeader 方法,添加一个 REFRESH 的Header
第二种,html的<meta >,在html中输出
<meta http-equiv="Refresh" content="3;URL='keep.asp'">,其原理和上一个方法一样。
第三种,javaScript
    头三种方法都是一样的,依靠刷新。可是为什么会出现刷新失败就停止呢?呵呵,那是因为那位朋友的页面A去刷新自己,而促使页面A刷新自己的方法需要页面A自己来调用。也就是自己调用自己,一旦调用失败一次,就无法继续了——像递归一样。
如果在页面里面用javascript写一个setTimeout或者interval方法,让某个frame去不断刷新(刷新什么无所谓,保持连接就行),这样,只要该页面一直在就不过期咯。这样的方式比较适合BBS中或者聊天室的最上面的广告区域(所有页面可以共用的部分)。

4、不用iis的session,用自己的session。这要说说什么是Session“会话”了。会话这个概念不是iis才有,只是iis提供了这样的技术实现。用户连接到iis服务器,服务器随机生成一个不重复的key给用户浏览器,记到cookie中。同时,所有通过asp写入session对象的数据都保存在服务器端,至于谁能访问这些数据?取决于谁拿着正确的key——也就是该用户的浏览器。这一切,iis和浏览器在后台完成了,所以我们没注意到。正是为了做到神不知鬼不觉,iis选择了用cookie的方式偷偷的来回传递那个key,那么,如果浏览器关了cookie,Session也就失效了。如果我们自己做自己的Session,原理一样。在用户登录或者连接的时候分配一个key,保存到数据库,并定期或者在接到用户的请求的时候检查这个key是否已经过期。至于用什么方式传递这个key,就看方便了:可以用cookie,这样不容易被看到;可以写在web里面,用隐藏的form提交,这样比较麻烦;可以带在访问url的后面作为参数,这样看起来有点乱。但是好处在于:三种传参方式灵活使用,不依赖于cookie和iis的session,还可以在多台服务器之间保持“会话”。不过要这么做,应该在系统设计的时候就做出决定,因为有一定的技术和开发成本投入。
5、带着参数走
这就是上面方法的折衷版本,上面有朋友其实已经提到了。显示当前页面的时候,就把参数写到页面的隐藏的表单或者javascript变量,提交发言内容的时候,虽然iis的session过期了,但是需要的参数都还在。这样,就不用考虑用户的浏览器是否支持cookie。呵呵,不太好的地方还是一样的:有些敏感信息存在web的源代码中...

所以咯,遇到必须考虑过期问题的时候,我还是喜欢用javascript刷新方式。偷懒的话,就用cookie。不过我们的系统都有自己的Session,所以一般来说我只需要在页面里面或者url上带上SessionKey就好了。


附:csdn的程序员做事情还是有点懒,连个错误处理都没有,人家连存储过程都看到咯...不知道其它安全漏洞的有?嘿嘿

#25


看看

#26


joyplay(想吃老虎的小猪)

关于IIS的session的实现方法,哪里有详细的资料可以参考一下??谢谢
我在写一个web server,正在考虑这个问题呢

#27


刷,刷,刷,刷,刷,

#28


你做一个VB控件,将Session变量值赋给这控件,让它一直保留吧,哈哈。

#29


在IIS里设置SESSION的值,或勾掉SESSION选项

#30


在IIS具体什么位置,我怎么没找到