To make sessions secure enough for semi-sensetive information, you essentially have to limit a session to one physical computer (as best you can). I do this by establishing the following security check:
In addition to the client presenting a valid session ID to the server, via either the URL or a cookie, one of the following must happen:
a) The client must also present a password which was placed in a cookie, OR
b) The first two portions of the client's IP address must match the IP that it had when the session began. (e.g., if your IP was 192.168.0.1 when you started the session, it would have to begin with 192.168 everytime you tried to access the session again.)
With this security check in place, it doesn't matter if I Instant Message my URL to a friend, or if someone reads it over my shoulder (or whatever). They will not be able to pass either security check, and so they will not be allowed into the session. Of course there are caveats, such as computers on the same network sharing an IP, etc. But this kind of ID system will never be perfect. This is why I said it works for semi-sensetive material.
The point of this system is that it provides excellent protection against session "hijacking", while allowing virtually anyone to maintain a session of their own.
The only time you would be unable to establish a session of your own, is if you were to:
a) turn off cookies, AND
b) jump some serious IP's
But if this is a concern for you, you could always give users an option (say, at login if using this for auth) to forgo the extra security. Or maybe check whether the client accepts cookies and lighten the rules a bit if it doesn't. Very customizable solution.