Nothing helped. There is something fundamentally wrong with sessions in CI. One essential thing that makes me think that way: When I refresh the same page (without login), every few seconds a new record is added to "ci_sessions" table. Which is incorrect comparing to documentation (and sessions in general):
When a page is loaded, the session class will check to see if a valid
session cookie is sent by the user’s browser. If a sessions cookie does
not exist (or if it doesn’t match one stored on the server or has
expired) a new session will be created and saved.
Note: not every refresh creates new record, it happens randomly. Sometimes it creates it every refresh, sometimes it's the same for minute or so (random time, random amount of refreshes)