我有一个MVC应用程序,SS集成了所有具有购物篮功能的BLL。我希望匿名用户能够添加到购物篮,然后在返回时保持篮子细节完整购物 - 所以我觉得在redis中使用ss-pid for sessionId是最好的方法。
有人可以确认我是否正确处理此问题,如果是,我该如何启用此功能? (我无论如何都看不到默认使用ss-pid。)
感谢。
答案 0 :(得分:1)
如果您想使用会话Cookie存储未经身份验证的用户信息,那么您需要设置:
Plugins.Add(new AuthFeature(...) {
GenerateNewSessionCookiesOnAuthentication = false
});
因此,当用户进行身份验证时,它会保留现有的Cookie,否则您将需要设置和使用自己的Cookie,这些Cookie在用户登录时不受影响。
SessionBag是一个很好的解决方案,它使用用户会话Cookie来存储未经身份验证的用户的会话数据,例如:您可以使用以下内容填充自定义POCO:
var unAuthInfo = SessionBag.Get<UnAuthInfo>() ?? new UnAuthInfo();
unAuthInfo.CustomInfo = request.CustomInfo;
SessionBag.Set(unAuthInfo);
然后,当用户进行身份验证时,从会话包中检索信息并使用OnAuthenticated()
事件将其添加到您的Typed Custom UserSession上,例如:
public class CustomUserSession : AuthUserSession
{
[DataMember]
public string CustomInfo { get; set; }
public override void OnAuthenticated(IServiceBase authService, IAuthSession session,
IAuthTokens tokens, Dictionary<string, string> authInfo)
{
var unAuthInfo = authService.GetSessionBag().Get<UnAuthInfo>();
if (unAuthInfo != null)
this.CustomInfo = unAuthInfo.CustomInfo;
}
}