1

我有问题,无法解决。也许我把它变得太难或太复杂了,或者我只是走错了方向,思考了一些没有意义的事情。下面是对所发生情况的描述。(例如,在浏览器中打开多个选项卡或同时请求其他一些页面的页面。)

我有一种情况,Web 应用程序同时收到 3 个请求并且必须创建新的用户会话。此会话用于在用户登录时存储通知、XSRF 令牌和登录信息。应用程序使用线程来处理请求(Bottle.py 下的 CherryPy)。

3 个线程(或进程,以防万一或多个应用程序实例)开始处理 3 个请求。他们检查 cookie,不存在会话,并创建一个新的唯一令牌,该令牌存储在 cookie 和 Redis 中。这将同时发生,他们不知道会话是否已经由另一个线程创建,因为所有 3 个令牌都是唯一的。

这些未使用的会话最终会过期,但它并不整洁。这意味着每次客户端同时进行 N 个请求并需要创建一个新会话时,N-1 个会话是无用的。

如果有一个可以用来识别客户端的属性,比如 IP 地址,那会容易很多,但是在这种情况下使用 IP 地址并不安全。此属性可用于在 Redis 中以原子方式存储会话,其他请求只会获取该会话。

4

1 回答 1

0

如果这是通过浏览器并使用 cookie,那么这根本不是问题。据我所知,cookie 将设置为的最后一个会话值。如果您使用的客户端不使用 cookie,那么它当然会为每个连接打开一个新会话。

于 2012-11-21T14:48:33.610 回答