我遇到了问题但无法解决。也许我把它变得太难或太复杂,或者我只是朝着错误的方向前进并思考那些没有意义的事情。以下是对所发生情况的描述。 (例如,在浏览器中打开多个选项卡或同时请求其他页面的页面。)
我的情况是Web应用程序同时收到3个请求,并且必须创建新的用户会话。此会话用于在用户登录时存储通知,XSRF令牌和登录信息。应用程序使用线程处理请求(Bottle.py下的CherryPy)。
3个线程(或案例或多个应用程序实例中的进程)开始处理3个请求。他们检查cookie,不存在会话,并创建一个存储在cookie和Redis中的新唯一令牌。这将全部同时发生,并且他们不知道会话是否已由另一个线程创建,因为所有3个令牌都是唯一的。
这些未使用的会话最终会过期,但它并不整洁。这意味着每次客户端同时执行N个请求并且需要创建新会话时,N-1会话都是无用的。
如果有可用于识别客户端的属性(如IP地址),则会更容易,但在这种情况下使用IP地址并不安全。此属性可用于在Redis中以原子方式存储会话,而其他请求只会接收该会话。
答案 0 :(得分:0)
如果这是通过浏览器并使用cookie,那么这应该不是问题。从我所知道的,cookie将被设置为最后一个会话值。如果您使用的客户端不使用cookie,那么它当然会为每个连接打开一个新会话。