In terms of software - haproxy is good, proven solution.
You have several ways how to achieve correct load balancing.
IP Hash balancing
Depending on your source IP, destination server will be calculated using hash of source ip. Therefore all requests from one IP will always reach the same server (unless it is down).
I use this option on projects, which can't use JWT.
Cookie markup
Webserver or load balancer returns one addional cookie that marks the server, which is supposed to process other requests comming from this user.
Share cookies across servers
I would personaly avoid this option as it gives you complexity to your infrastructure and you have to care about session storage.
JSON Web Tokens (session in cookies)
You don't care about sessions at all as it is stored in cookies. Therefore your servers don't can process every request no matter wheras it is server A or B. As for me - this is the best solution for big part of the web applications, but! There is a huge warning here as you have to understand what you do.
If yes for the question before, then how can I make a solution so the load balancer will not stay in the middle with Client - Backend server?
This is also possible, you can just simply use subdomains. If your user reaches www, it decides wheras user is redirected to s1.domain.tld or s2.domain.tld, ...
I have seen this solution several times in the past, but modern applications don't use this. It e.g. creates duplicate pages for indexing bots.
You can also get rid of your balancer and use ECMP on network level, but it is quite a bit more complex to configure. I would personaly stay with the load balancer.