【问题标题】:ASP.NET Is possible to extend the life of session variables at each connection?ASP.NET 是否可以在每个连接处延长会话变量的寿命?
【发布时间】:2013-12-12 12:10:16
【问题描述】:

我正在开发一个电子商务网站,一些用于识别用户的信息存储在会话变量中。

如果客户在16:00登录并且会话变量有两个小时的超时,在18:00,无论他在做什么,他都会断开连接。

这可能会给客户在下订单时带来问题。

即使将变量的生命周期延长到 8 小时,客户端也有可能在 23:55 重新连接(大约 16:00 后的 8 小时),并且仅在浏览 5 分钟后就会断开连接。

我想知道是否有办法延长每个连接的当前会话的持续时间。

例如: (假设每一页都有延长会话时长的代码)

the session expires every 30 minutes.

user1 connects at 16:00.

the session will expire at 16:30.

user1 enters the shopping cart page at 16:02

the session will expire at 16:32.

user1 enters the home page at 16:04

the session will expire at 16:34.

and so on ..

if user1 does not open any page for 30 minutes will be disconnected.

目前我在 vb.net 中构建了整个系统,我能够使用命令 Session.Timeout = 60 延长会话变量的持续时间(仅从第一个变量声明开始)但我找不到动态扩展的方法它。

【问题讨论】:

标签: asp.net session


【解决方案1】:

更改您的 web.config。将您想要的时间作为 timeout 字段的值。

<sessionState 
    mode = "[Off|InProc|StateServer|SQLServer|Custom]"
    timeout = "yourTimeHere">
</sessionState>

【讨论】:

  • 这不会动态扩展它
【解决方案2】:

如果我了解您的需要,只要客户端的浏览器处于打开状态,您就希望延长会话。

您必须每隔几分钟对 asp.net 页面进行一次 ajax 调用以更新会话。

类似的东西

    function keepSession() {
        setTimeout("callWebService()", 60000); // every 1 min
    }

    function callWebService() {//call httphandler ,webservice or aspx page
        $.ajax({
                url: "/WebServices/keepSession.svc/keepSession",
                // The key needs to match your method's input parameter (case-sensitive).
                type: "POST",
                contentType: "application/json; charset=utf-8",
                success: function (data) {
});

    }

在这种情况下,您根本不需要担心会话超时。

另外,我建议将会话保持在 sql 模式,因为它在 InProc 模式下非常脆弱。

【讨论】:

  • 是一个非常有趣的建议,可以将此过程与 ajax 一起使用!没想到!
  • 我在建电子商务的时候也遇到了同样的问题,你一开始就将会话保持在sql模式,然后通过调用服务器方法 throw ajax 会话将在浏览器中保持活动状态已打开
  • 是“使动态”的一个有趣的愿景,但目前我的客户希望在一段时间不活动后断开用户的连接,不管你是否打开了页面。不管怎样,你给了我一个好主意,以备将来使用!
猜你喜欢
  • 1970-01-01
  • 2012-06-03
  • 2013-10-12
  • 2011-11-12
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 2011-08-07
  • 2010-09-21
相关资源
最近更新 更多