【发布时间】:2014-05-16 10:35:15
【问题描述】:
我正在使用 asp.net 3.5。我只想尽可能长时间地进行会话(浏览器关闭)。这里我只是按照以下步骤操作:
1) 会话超时值更改为 Web 配置失败。 2) 使用一些外部 .ashx 文件并在母版页使用 javascript 调用如下技术:
<%@ WebHandler Language="C#" Class="SessionHeartbeat" %>
using System;
using System.Web;
using System.Web.SessionState;
public class SessionHeartbeat : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
context.Session["Heartbeat"] = DateTime.Now;
}
public bool IsReusable {
get {
return false;
}
}
}
母版页上的这个 javascript:
<script type="text/javascript">
function setHeartbeat() {
setTimeout("heartbeat()", 300000); // every 5 min
}
function heartbeat() {
$.post(
"../SessionHeartbeat.ashx?Timestamp" + new Date().toString()",
null,
function(data) {
//$("#heartbeat").show().fadeOut(1000); // just a little "red flash" in the corner :)
setHeartbeat();
},
"json"
);
}
</script>
但这并没有给我想要的结果。 请帮帮我...
------------------------------------已更新-------- --------------------------------
我在这里修改我的 jquery :
<script type="text/javascript">
function setHeartbeat() {
setTimeout("heartbeat()", 300000); // every 5 min
}
function heartbeat() {
$.get(
"../SessionHeartbeat.ashx",
null,
function(data) {
beatHeart(2); // just a little "red flash" in the corner :)
setHeartbeat();
},
"json"
);
}
// beat the heart
// 'times' (int): nr of times to beat
function beatHeart(times) {
var interval = setInterval(function () {
$(".heartbeat").fadeIn(500, function () {
$(".heartbeat").fadeOut(500);
});
}, 1000); // beat every second
// after n times, let's clear the interval (adding 100ms of safe gap)
setTimeout(function () { clearInterval(interval); }, (1000 * times) + 100);
}
</script>
----------------------已更新--------- -------------------------------------------
【问题讨论】:
-
尝试使用 $.post??以及为什么你调用 setHeartbeat();从get call成功??
-
您为什么要这样做?您是在单台计算机上运行网络还是使用网络农场?无论哪种方式,会话状态都是通过会话 cookie 维护的(默认情况下)——客户端发送会话 cookie,服务器识别 cookie 并从内存中获取会话状态。如果我清除此 cookie,无论您在服务器端做什么,会话都会丢失。还要注意客户端缓存 - 添加某种“/SessionHeartbeat.ashx?Timestamp”+ new Date().toString() 而不是静态 url。
-
我假设您的描述中的意思是浏览器最小化而不是浏览器关闭。如果您希望会话在用户没有活动的情况下保持活动状态(即他们没有浏览网站,保持滑动窗口打开)在您的“心跳”中返回一些随机数据。我们使用这种技术在我们的 web.config 中有一个小的(低于 1 小时)滑动会话,但是在我们知道用户没有活动的某个页面上,会话必须无限期保持打开状态(阅读长文档)。我们每 30 秒检测一次并返回 4-8k 的随机文本,这对我们来说完美无缺
-
能否包含 web.config 的相关部分?
-
@freefaller 我还没有尝试过多个浏览器。如果我们最终将其投入生产,我会发表评论,我认为我暂时不会有时间测试所有内容。我需要得到一些现实世界的关注,将我的到期时间设置回 45 分钟并正确完成它。但它确实似乎有 2 分钟的超时时间。
标签: c# javascript asp.net session