我正在使用无模式数据库实现自己的SessionStateStoreProvider。从documentation来说有点难以分辨,但似乎我必须有一个单独的进程来清理过期的会话,因为数据库无法通知会话状态存储会话已过期
我错了吗?我还没有看到覆盖SetItemExpireCallback方法的替代示例。
答案 0 :(得分:1)
是的,我相信这是正确的。
如果您将会话存储在数据库中,那么Sql Server Agent上有一个Job,它每隔一分钟调用一次这个过程:
DECLARE @now datetime
SET @now = GETUTCDATE()
DELETE ASPStateTempSessions WHERE Expires < @now
会话没有触发器过期。让我们说这是一个触发器,可以在哪里?没有地方可以单独触发该触发器以了解会话已过期并自动删除他自己。
另一方面,你可以做的,不是创建一个计时器,但当用户要求一个页面,每1-2分钟,触发一个功能删除过期的。
所以你从用户调用中触发,但你必须使用某种锁定每1-2分钟运行一次,并检查最后一次运行。
希望这有帮助。