Caching saves rendered HTML, controls, and other objects in memory to improve performance by serving cached content rather than regenerating it. There are three types of caching in ASP.NET: page-level caching saves entire pages; fragment caching saves portions of pages like controls; and caching data objects allows caching objects like tables. Session state stores key-value data for individual users during their session, while cookies store small persistent data files on the user's device. Caching is best for shared content, session state for individual user data during a session, and cookies for persistent per-user data.