我正在开发电子商务网站,识别用户的一些信息存储在会话变量中。
如果客户在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
扩展会话变量的持续时间(仅从第一个变量声明开始)但是我找不到办法动态扩展它。
答案 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模式下非常脆弱。