Rachel-
We have system that has basically turned into a complete management system for our business. We have everything from content management for our store front to order processing and accounting. The same domain also hosts content that is publicly accessible.
In order to access our managmenet system, the user must log in at a login page. The username and pass are authenticated against a DB which then pulls down various other settings (access rights, user ID, etc). All of this information may/may not be used in the course of processing the rest of the page, but its a standard set of information for all pages. This process is repeated at the beginning of every page on our site, whether secure or not. So all of our system's pages begin with the following:
<?
require_once ('./load-libs.php'); // Load essential library files
session_start(); // Grab the user's credentials
checkValidUser(); // Where all of the authentication takes place
displayHeader();
// Page content here
displayFooter();
?>
User credentials are stored as session variables then the user is re-authed on every page load. This may be a bit of an overkill, however it allows us to do thinks like lock a user out, shutdown a part of the site, or update a user's access rights without the user having to logout and login again. The processing is almost exactly the same whether or not all of the access rights are updated on every load, so there isn't any performance hit by doing this.
Now for HTTP vs. HTTPS. We have our system broken down into different "realms", e.g. Operations, Accounting, Admin, etc, etc. Some of these areas don't deal with sensitive content, e.g. the "Home" area. Other areas, such as accounting, do display sensitive information. (I suppose we could simply put the entire site on SSL, but that was just a design decision on our part.)
Our users have to be able to jump from HTTP to HTTPS and back transparently without any glitches. Originally, we were simply using the same session variables when jumping between the two. This worked OK most of the time, but we started running into bizarre authentication problems when jumping from one to the other. It was at that point that we realized it was a server name issue. We adopted the approach mentioned above, and it works extremly well regardless of the environment. In other words, we have a development platform and "live" platform, and this solution allows us to jump back and forth on any site, any where simply by changing the target URL of the jumps.