会话

基础插件提供的提供了独自编写的会话管理功能, 不依赖于Asp.Net和Asp.Net Core.
考虑到网站可能会部署到多个服务器, 会话保存在数据库.

会话的数据结构

会话的ER图

会话中可以保存自定义的数据, 自定义的数据使用json存储.

获取和保存会话

获取和保存会话需要使用SessionManager.
调用SaveSession可以保存之前使用GetSession获取的会话.

获取和保存会话的例子
添加src\Controllers\SessionExampleController.cs

[ExportMany]
public class SessionExampleController : ControllerBase {
    [Action("example/get_session")]
    public IActionResult GetSession() {
        var sessionManager = Application.Ioc.Resolve<SessionManager>();
        var session = sessionManager.GetSession();
        return new JsonResult(session, Formatting.Indented);
    }

    [Action("example/save_session")]
    public string SaveSession() {
        var sessionManager = Application.Ioc.Resolve<SessionManager>();
        var session = sessionManager.GetSession();
        session.Items["ExampleKey"] = DateTime.UtcNow;
        sessionManager.SaveSession();
        return "success";
    }
}

过期时间

会话有过期时间, 需要延长过期时间时请使用SetExpiresAtLeast函数.
这个函数确保保存会话时, 浏览器中的过期时间也会相应延长.
以下代码设置会话最少有效一个小时

session.SetExpiresAtLeast(TimeSpan.FromHours(1));

关联用户

会话可以关联用户, 关联时需要设置用户Id到ReleatedId成员.
基础插件不提供用户功能, 所以只留了关联Id的成员, 成员的类型是Guid.

会话Id的储存

会话Id默认保存在Cookies中, 如果有需要请注册自定义的ISessionIdStore.