Based on Tobias Xy answer and some additional research I was able to find solution. Main idea, like Tobias Xy stated, is to create two different firewalls. As each separate firewall has it's own session namespace. Only part that was missing is to have two different providers for Administrator and Member.
Providers can by of any type (in_memory, entity, etc.) but I used provider service that loads users from database with some custom logic. And for testing purposes I used http_basic authentication method, so my security.yml looks like this:
security:
providers:
crence_cms_admins_provider:
id: crence_cms.user.provider.admin
crence_cms_members_provider:
id: crence_cms.user.provider.member
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
backoffice:
pattern: ^/admin/
provider: crence_cms_admins_provider
http_basic: ~
frontoffice:
anonymous: ~
provider: crence_cms_members_provider
http_basic: ~
encoders:
CrenceCMS\UserBundle\Model\AdminModel:
algorithm: bcrypt
cost: 12
CrenceCMS\UserBundle\Model\MemberModel:
algorithm: bcrypt
cost: 12
access_control:
- { path: ^/admin/, roles: ROLE_ADMIN }
More info about creating custom provider can be found here: https://symfony.com/doc/current/security/custom_provider.html