In general, there are two approaches you can use if you want to personalise a page which is intended to be stored in a full page cache.
- If your reverse proxy supports it, you can use ESI (Edge Side Includes) and mark up your template appropriately. ESI allows you to insert a marker in your generated HTML where the personalised content should go, then your proxy will request just the personalised content from your app server's appropriate controller path when required. If you're using Varnish, ESI is available to use. The Lightspeed extension for Magento has a feature called "Hole Punching" which does a similar thing.
- If ESI or Hole Punching isn't available to you, then the other option is to allow the main page to be cached in your full page cache, and use a bit of javascript to make a separate Ajax request and fetch the information you need.