ASP.NET是否可以延长每个连接的会话变量的寿命?

时间:2013-12-12 12:10:17

标签: asp.net session

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

如果客户在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扩展会话变量的持续时间(仅从第一个变量声明开始)但是我找不到办法动态扩展它。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

你必须每隔几分钟对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模式下非常脆弱。