ServiceStack具有默认的cookie名称 在SessionFeature.cs中定义的“ss-id”“ss-pid”和“ss-opt”
有没有办法将默认名称更改为其他名称?
HostConfig中的配置代码似乎没有引用它。
非常感谢任何提示/指示。
答案 0 :(得分:4)
正如您在SessionFeature.cs代码中所述,Cookie名称定义为const
,并且不是用户可配置的。
但是,您可以使用过滤器将Cookie名称更改为更适合请求和响应的内容。添加到您的配置方法:
const string mySessionIdentifier = "mySessionId";
// Converts incoming requests with "mySessionId" cookie to "ss-id"
PreRequestFilters.Add((IRequest httpReq, IResponse httpRes) =>
{
var cookie = httpReq.Cookies[mySessionIdentifier];
if (cookie != null)
{
httpReq.Cookies.Remove(mySessionIdentifier);
httpReq.Cookies.Add(ServiceStack.Keywords.SessionId, cookie);
}
}
// Converts responses with outgoing cookie "ss-id" to "mySessionId"
GlobalResponseFilters.Add((IRequest httpReq, IResponse httpRes, object dto) => {
var cookies = httpRes.CookiesAsDictionary();
string cookie;
if (cookies.TryGetValue(ServiceStack.Keywords.SessionId, out cookie))
{
httpRes.DeleteCookie(ServiceStack.Keywords.SessionId);
httpRes.SetCookie(new Cookie(mySessionIdentifier, cookie));
}
});
你也可以suggest here这是可配置的。
答案 1 :(得分:1)
可配置cookie名称的另一个案例是,您可能在domain.com上说MVC站点,在api.domain.com上说api。如果您同时利用servicestack的会话功能(但具有单独的登录),则ss-id等cookie将在两个站点上相互争斗。在IE和Edge中就是这种情况,其中域和子域cookie始终是共享的,而在Chrome中,cookie保持独立。
我们有这样的配置 - domain.com上的MVC网站,以及托管api的各种子域,用于我们应用的各种变体。只要有人使用IE而不是Chrome,就会破坏MVC网站和子域之间的cookie。
不幸的是,上面的过滤器解决方案不适用于servicestack MVC集成。我们从domain.com切换到www.domain.com为时已晚,因此我们目前无法在MVC网站上享受servicestack的会话存储。
我已请求更改功能。