Sessions and caching are inherently incompatible.
When you're caching things on the page level, you're serving data that never hits WordPress. When you're caching things on the opcode level, you're caching the responses of function calls which will no longer be dynamic. When you're caching things on the database level, you're preventing data from ever interacting with the database.
You can make sessions work with a cache enabled, but you have to make it so that your session-heavy pages can skip the cache.