关于asp.net mvc中的session时间到期问题

「已注销」 2017-12-11 03:33:58
在网上找了下,基本都是说session无法获取值,没有和我这个类似的,所以只好上来问问,求大神解答,小弟的分都贡献了,实在每分了
关于session的设置如下

public ActionResult CheckPwd(string username, string pwd)
{
CSSoft.Model.TResult result = CSSoft.Service.Account.CheckUser(username, pwd);
if (result.status == 0)
{
//设置全局session
Session["loginCode"] = username;

//设置cookie
Response.Cookies["loginCode"].Value = username;
Response.Cookies["loginCode"].Expires = DateTime.Now.AddDays(1);
}
return Json(result, "application/json", System.Text.Encoding.UTF8, JsonRequestBehavior.AllowGet);

}

前端使用的是iframe+tab的方式
现在的问题是,session取值没有问题,但是当我在iframe中操作20分钟后,session 就自动到期,导致系统重新退回到登陆页
前端增加tab的方式如下

var active = {
tabAdd: function (url, id, title) {
//新增一个Tab项
element.tabAdd('tab', {
title: title //用于演示
, content: '<iframe data-frameid="' + id + '" frameborder="0" name="content" width="100%" src="' + url + '"></iframe>'
, id: id //实际使用一般是规定好的id,这里以时间戳模拟下
})
CustomRightClick();//绑定右键菜单
FrameWH();//计算框架高度
}
, tabChange: function (id) {
//切换到指定Tab项
element.tabChange('tab', id); //切换到:用户管理
$("iframe[data-frameid='" + id + "']").attr("src", $("iframe[data-frameid='" + id + "']").attr("src"))//切换后刷新框架
}
, tabDelete: function (id) {
element.tabDelete("tab", id);//删除
}
, tabDeleteAll: function (ids) {//删除所有
$.each(ids, function (i, item) {
element.tabDelete("tab", item);
})
}
};
...全文
782 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你说“首页地址不变,iframe里边的子页面用来查看”,这个其实要进一步来根据原理来理解到底有没有通知 asp.net 的 Session 最后访问时间问题。单纯说到 iframe 这一个名词儿是解决不了问题的。 至于你说“没有想到一个很好的缓存方案”,这个其实不用“想”,而是要正规学习 asp.net 教科书上的有关于“数据缓存”的知识。上面有理论、有实践,有应用例子。其实关键是“不用Session集合”来编程设计,要做到“不用Session集合”那么这就肯定需要另外学习和思考。
  • 打赏
  • 举报
回复
如果你的外边的页面跟 iframe 里边的页面是同一个网站,不会存在外边的页面“过期”的问题。 如果根本就是不同的网站,也就是说里边的 iframe 是来套用其它网站,那么你外边的页面也需要跟 iframe 里边一样保证定时访问它自己的网站,例如需要在页面上定时访问她它的网站自己的一个 ashx。
闭包客 2017-12-12
  • 打赏
  • 举报
回复
引用 6 楼 zhoushangwu_0504 的回复:
[quote=引用 4 楼 sp1234 的回复:] 如果 iframe 的目标与页面是同域的,那么你在 iframe 中使用一个 ajax 定时(比如说300秒)访问自己的 ashx 就行了。
你好,大神,我的iframe是同一个域下的,而且所有的数据访问使用的都是ajax,但是情况是我在活动状态下,session大概20分钟左右就过期,所以我在想一个问题,就是我的首页在浏览器中地址不改变,子页面全部是iframe来看的,是不是浏览器默认地址不改变就过期?但是又搞不明白,不管是同步请求还是异步请求,都会有一个头文件,难道浏览器不认? 至于大神说的Cache缓存我也在慢慢了解,没有想到一个很好的缓存方案,小白菜目前正在成长中,感谢各位大神的浇肥灌溉![/quote] 你的情况不在【闲置回收】的范围内。我认为和 iis express 有关,我没有用过。
  • 打赏
  • 举报
回复
没有看懂你在 #6 楼的问题的意思。我说一下Session机制: 浏览器端的页面管理者 SessionID(在 cookie中),那么当你的 iframe 跟其它主页面是同一个网站的(同域、同端口、同一个应用),那么当刷新访问web 服务器时 cookie 中的 SessionID 值应该是一样的。当页面需要在 asp.net 服务器端重建 Page 对象实例,它从 asp.net 系统的 Session 集合中把属于这个 SessionID 的所有数据(引用)都拷贝到页面的 Session 集合里边。瞬间之后,当页面请求处理结束,asp.net 在 Page 实例销毁之前再把这些 Session 中的数据单元拷贝回 asp.net 系统的 Session 集合。但是 web 是无状态的,asp.net 不可能永远保存着某些 SessonID 对应的数据单元,它多什么时间放弃这些数据?超时20分钟。 因此 asp.net 仅当有一个客户端请求时,根据 SessionID 来判断数据是否需要保存。不纠结于什么”头文件“。并且如果你的页面仅仅”发呆“而不回发请求到 asp.net 应用程序服务器端的话,当然也不可能通知到 asp.net。
「已注销」 2017-12-12
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
如果 iframe 的目标与页面是同域的,那么你在 iframe 中使用一个 ajax 定时(比如说300秒)访问自己的 ashx 就行了。
你好,大神,我的iframe是同一个域下的,而且所有的数据访问使用的都是ajax,但是情况是我在活动状态下,session大概20分钟左右就过期,所以我在想一个问题,就是我的首页在浏览器中地址不改变,子页面全部是iframe来看的,是不是浏览器默认地址不改变就过期?但是又搞不明白,不管是同步请求还是异步请求,都会有一个头文件,难道浏览器不认? 至于大神说的Cache缓存我也在慢慢了解,没有想到一个很好的缓存方案,小白菜目前正在成长中,感谢各位大神的浇肥灌溉!
「已注销」 2017-12-12
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
你说“首页地址不变,iframe里边的子页面用来查看”,这个其实要进一步来根据原理来理解到底有没有通知 asp.net 的 Session 最后访问时间问题。单纯说到 iframe 这一个名词儿是解决不了问题的。 至于你说“没有想到一个很好的缓存方案”,这个其实不用“想”,而是要正规学习 asp.net 教科书上的有关于“数据缓存”的知识。上面有理论、有实践,有应用例子。其实关键是“不用Session集合”来编程设计,要做到“不用Session集合”那么这就肯定需要另外学习和思考。
大神你好,缓存的问题,我这边是想整站使用缓存,所以就需要再看看资料多了解,整理整理思路,因为对于缓存这一块不太了解,所以这里不讨论缓存,我现在正在看关于缓存的资料与实例 还有大神你说的同一个网站不存在session过期一说,但是我确实是遇到了,就是因为在同一个网站所以奇怪,因为session的解释就是当前网站不在活动多长时间后session过期 还有大神你说的不用session,我网上找找资料,学习学习其他方法,大神请原谅小白简单问题,小白知识正在扩充中,感谢大神的灌顶
  • 打赏
  • 举报
回复
引用 2 楼 zhoushangwu_0504 的回复:
[quote=引用 1 楼 closurer 的回复:] 设置 iis 的回收策略: http://blog.csdn.net/closurer/article/details/72389011
我还在程序调试阶段,使用的还是 iis express iis express 没有过期设置,至于iis express是否依赖iis这个我也不是很清楚 还是session的非活动过期回收[/quote] 如果只是开发阶段,那么为时不晚,从现在起“不用session集合”就可以避免这种问题。客户端只要有一个会话 SessionID 就足以了,然后后台数据可以放到数据库中,使用数据 Cache 来高速缓存,不用 Session 集合。
  • 打赏
  • 举报
回复
如果 iframe 的目标与页面是同域的,那么你在 iframe 中使用一个 ajax 定时(比如说300秒)访问自己的 ashx 就行了。
by_封爱 2017-12-11
  • 打赏
  • 举报
回复

<sessionState mode="StateServer" timeout="6000" stateNetworkTimeout="30"/>
webconfig配置这个节点就行了.. 记住一定要用StateServer才可以体现出session过期这种东西... 所以我还是没明白 . 你是不想让他过期?
「已注销」 2017-12-11
  • 打赏
  • 举报
回复
引用 1 楼 closurer 的回复:
设置 iis 的回收策略: http://blog.csdn.net/closurer/article/details/72389011
我还在程序调试阶段,使用的还是 iis express iis express 没有过期设置,至于iis express是否依赖iis这个我也不是很清楚 还是session的非活动过期回收
闭包客 2017-12-11
  • 打赏
  • 举报
回复

62,025

社区成员

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

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

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

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