会话
基础插件提供的提供了独自编写的会话管理功能,不依赖于Asp.Net和Asp.Net Core。
考虑到网站可能会部署到多个服务器,会话保存在数据库。
会话的数据结构
会话中可以保存自定义的数据,自定义的数据使用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
。