如何设置session,只要在浏览器一直打开着就不过期?

jinyuanzhi 2008-11-27 11:58:53
webconfig.xml:
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
在这里只能设置一个时间。不能满足我的要求。

有的朋友说用定时刷新页面的方法,我觉得这样加大了服务器的负担。

请问有没有较好的方法?
...全文
1286 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这“肯定”给网站加大的负担而不是较小负担,但是这种负担完完全全应该忽略不计 --> 这“肯定”给网站加大了负担而不是减小负担,但是这种负担完完全全应该忽略不计
  • 打赏
  • 举报
回复
过期不是问题。

但是Session不仅仅有“过期”问题,实际上还有“丢失”问题。面对丢失问题,使用cookie而放弃session我认为是很明智的(如果需要缓存数据可以使用Cache真正地具有很多缓存管理功能,而Session则不必用来做缓存)。
  • 打赏
  • 举报
回复
[Quote=引用楼主 jinyuanzhi 的帖子:]
有的朋友说用定时刷新页面的方法,我觉得这样加大了服务器的负担。
[/Quote]

你能用数字来说出你觉得加大了多大的负担吗?我们都知道到网站就是不断被客户端访问的,如果客户端每隔5分钟多访问一次网站上的一个“空白”的网页(你直接创建一个aspx就可以,什么也不用往里边写),这“肯定”给网站加大的负担而不是较小负担,但是这种负担完完全全应该忽略不计。
周公 2008-11-27
  • 打赏
  • 举报
回复
Cookie对象和Session对象一样也是用来保存特定的用户相关的数据,不过Session不同的是Cookie保存在客户端而不是服务器上,每次客户端发出请求的时候都会把Cookie一起发送到服务器,服务器每次响应客户端请求的时候会重新把Cookie发送到客户端保存。
Cookie保存数据有以下特点:
Cookie中的数据保存在客户端;
Cookie中只能保存字符串类型的数据,如果需要在Cookie中保存其它类型数据,需要将其转换成字符串类型后保存;
Cookie也有其默认生命周期,也可以手动设置,最大可设置成50年之后过期。
同Session的情况一样,有可能在一个网站中使用到的Cookie不止一个,我们仍通过Cookie的名称来区分不同的Cookie。
设置Cookie的过程就是在服务器的响应对象Response的Cookie集合中增加一个Cookie的实际,Response对象会把这个Cookie集合中的所有Cookie都发送客户端。


Application


Application和Session存储的数据类型和存储位置一样,都是存放Object类型的数据(也就是任意类型),并且存放在服务器上,不同的Application中的数据可以由网站中所有的用户来设置或者获取。并且Application中存放的数据没有时间限制,除非我们手动删除或者服务器重新启动,否则存放的数据都会丢失。
下面是Session、Cookie和Application的区别:

名称
使用范围
存储位置
存放数据类型
生命周期

Session
特定用户
服务器
Object,也就是任意类型
有,可以自行设置

Cookie
特定用户
客户端
String,也就值字符串
可以自行设置

Application
所有用户
服务器
Object,也就是任意类型
周公 2008-11-27
  • 打赏
  • 举报
回复
Asp.net夜话之二:asp.net内置对象
准确地说,asp.net并没有内置对象这一说,jsp里确实把request、response这些当作jsp的内置对象,这里只不过是借用了一下jsp的说法而已。上面提到的很多都是在做asp.net开发时无需new就能使用的对象(类似的还有很多,在asp.net中所有的网页都是继承自System.Web.UI.Page这个类,上面的提到多是Page类的属性)。本文介绍System.Web.UI.Page类的几个常用属性,如Request、Response、Server、Session、Cookie、Application,并讲述了及表达式用法。
周公 2008-11-27
  • 打赏
  • 举报
回复
用Cookie吧,Cookie理论上可以保存50年。
xiaojunyaoac 2008-11-27
  • 打赏
  • 举报
回复
保持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就文件就可以了!
jiang_jiajia10 2008-11-27
  • 打赏
  • 举报
回复
建议用Cookie
hao1hao2hao3 2008-11-27
  • 打赏
  • 举报
回复
session好像无法达到这样的要求吧!
biaofanwo 2008-11-27
  • 打赏
  • 举报
回复
把SESSION 的out 时间设置的长一点
fabric区块链 2008-11-27
  • 打赏
  • 举报
回复
用application不行?
wfyfngu 2008-11-27
  • 打赏
  • 举报
回复
使用Cookie代替Session

62,240

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧