Your code uses static
fields:
public class ComplexUserData
{
public static string complexAccountName;
...
Such a static
field is shared by all threads, so all users are working on the same data(!) This is very dangerous.
static
is probably the most dangerous keyword, because the code works but fails weirdly in a multi-threaded scenario and can leak information to other parties.
Solution: Don't use static unless you really understand what it does. Never store per-user, per-request or similar information in static variables. Store all user information in the session, in a database or a similar data store.