I can do this using headers, but I can't use headers when my page is using sessions.
So on a page using sessions how can I ensure it's not cached? I'm calling it via ajax and want the data to update, currently it's only displaying the cached data.
What's stopping you from using headers when you use sessions? The session mechanism uses headers. But while you're putting together an answer to that, in the meantime you can look at session_cache_limiter.
I'm guessing you get an error when you call session_start() because your script has already output some text to the browser. You should look at the actual, raw output of your scripts to see if your code is causing E_NOTICE or E_WARNING or E_ERROR problems because these result in headers being sent.