Full Answer
localStorage looks like an escape hatch because ITP is usually described as a cookie policy, so people assume moving identifiers into another store sidesteps it. It doesn't. Since 2020, WebKit has applied a seven-day expiry to all script-writable storage, localStorage included, when the page that wrote it carries resources Safari classifies as trackers. The identifier you stashed yesterday can be gone within a week, and you've added client-side code to maintain for no durable gain.
There's a deeper problem: localStorage is purely a browser construct. It is never transmitted with requests, so your server can't read it to stitch a session or match a conversion. Cookies at least travel with every request. So a localStorage 'workaround' gives you a value that both expires quickly and stays trapped in the browser, which is the opposite of what attribution needs.
The approach that survives is to move identity off the browser entirely. When your own server sets a first-party cookie over HTTP and matches events using first-party data you already hold, the seven-day script cap is irrelevant because no script set the cookie. That's one durable mechanism instead of a stack of client-side patches, and it behaves the same across Safari, Firefox, and Brave.