ServiceStack支持会话https://github.com/ServiceStack/ServiceStack/wiki/Sessions。
ServiceStack是否使用除cookie之外的其他一些机制来可靠地识别客户端(浏览器)?
我们假设以下场景: 我打开一个带有几个标签的浏览器(之前保存过),浏览器还没有任何与会话相关的cookie(ss-pid等)。 所有选项卡同时转到服务器,服务器(ServiceStack)可能会创建多个会话而不是一个。
这个场景可能看起来很人为,但我想知道ServiceStack是否使用来自尚未识别的浏览器的并发请求“修复”了这个场景。
答案 0 :(得分:2)
不,ss-id
和ss-pid
Cookie包含用于查找用户会话的会话标识符,这实际上只是IAuthSession持久存在的实例在已注册的ICacheClient
中包含会话ID的位置。如果没有会话ID(包含在Cookie中),ServiceStack就无法将匿名请求与同一用户会话进行匹配/定位或关联。
但Cookie本质上是粘性的,即当您打开多个标签时,浏览器会自动重新发送为该域注册的相同Cookie。
如果打开多个匿名(即没有设置Cookie)标签并且其中一个发出请求,ServiceStack将检测不发送任何Cookie并自动生成并指示客户端添加新的ss-id
,{{1} } 饼干。从那时起,来自任何现有选项卡的任何未来HTTP请求(包括Ajax请求)将包含相同的cookie。因此,当其中一个选项卡进行身份验证时,来自任何选项卡的所有未来请求都将在同一个经过身份验证的会话中发送请求。
从 v4.0.32 + ,也可以使用HTTP标头发送会话ID,例如:ss-pid
,X-ss-id
。