首页 > 解决方案 > ServiceStack 会话时间增加

问题描述

如何增加会话时间。它在 10 分钟后注销,但我需要将其延长至 2 小时。

我的代码:

public override void OnAuthenticated(IServiceBase AuthService, IAuthSession Session, IOAuthTokens Tokens, Dictionary<string, string> AuthInfo) {
    try { 
        base.OnAuthenticated(AuthService, Session, Tokens, AuthInfo);

        //var Manager = new ArbProManager(false, 0, "ArbProService");
        //fwkArbProMobile.dbContext.EntityUserAccount User;

        string dbName = ConfigurationManager.AppSettings["MasterDatabase"];
        DAL.MobileUser usrContext = new DAL.MobileUser(dbName);
        Types.MobileUser User = usrContext.GetForEmail(Session.UserAuthName);

         // User = Manager.UserAccountInstance(Session.UserAuthName);
         Session.UserAuthId = User.Id.ToString();
         Session.DisplayName = User.EmailAddress;
         Session.Email = User.ClientDatabaseName;
         Session.Sequence = User.UserGuid.ToString();
         //var session = AuthService.GetSession();
         //AuthService.SaveSession(session, TimeSpan.FromDays(100));

         //AuthService.SaveSession(Session, SessionExpiry);
         //var sessionKey = SessionFeature.GetSessionKey(AuthService.GetSessionId());
         //redis.ExpireEntryIn(sessionKey, slidingExpiry); 
         //new CredentialsAuthProvider { SessionExpiry = TimeSpan.FromDays(10) };
         //AuthService.SaveSession(Session, SessionExpiry);
         Logger.InfoFormat("ArbProAuthProvider:UserId {0} logged in as {1}", Session.UserAuthId, Session.DisplayName);
     }
     catch (Exception ex) {
         Logger.ErrorFormat("OnAuthenticated:Error='{0}'", ex.ToString());
         throw ex;
     }
 }

标签: c#

解决方案


在 ServiceStack 中控制Session生命周期的最灵活的方法是在每次保存 Session 时进行拦截,并通过覆盖OnSaveSession您的 Session 来更改保存的 Session Expiry AppHost

public override void OnSaveSession(
    IRequest httpReq, IAuthSession session, TimeSpan? expiresIn = null)
{
    var customExpiry = ...
    base.OnSaveSession(httpReq, session, customExpiry);
}

推荐阅读