Custom settings are basically cached at the application level. I'm not sure if I'd recommend that approach, but you might be able to get it to work.
If you create a Custom Setting named "SessionData", and add your custom fields (which symbolizes the data you want to store in session), you could save data to it like this:
Database.SaveResult result = Database.insert(new SessionData__c(YourFieldHere='Your value here etc'));
Then you can use the resulting custom setting ID to store in a cookie. While custom settings can be obtained using normal SOQL, the major advantage is that the data is cached and can be accessed like this:
if (SessionData__c.getAll().containsKey('unique ID from cookie here'))
System.debug(SessionData__c.getInstance('unique ID from cookie here').YourFieldHere);
Note: Custom settings aren't designed for this, so you'll need to periodically purge old custom settings data, as normal session management systems do.