This is an explanation of the options available:
- using an MD5 hash of the user's email address as the session identifier
This defines how the session is identified but not how that indentity is given to the correct website visitor.
MD5 is insecure (a session link). It should not be used to parse identifying data. Email addresses are identifying data. This answer is deeply insecure and dangerous.
Result: The correct browser will not be identifiable. There is a high security risk.
- using the browser's network address as the session identifier
The browser network address (aka IP) changes between times depending on the ISP - you may be 123.234.345.456
one minute and then 243.534.346.41
the other while on the same website.
Also using 2 will open up some very interesting bugs. Specially when there are more than one client from the same network. People will all over sudden start sharing sessions. (Thanks).
And finally, IPv4 addresses are extremely limited in range so it would be easy for someone to brute force attack (ie try addresses until one works).
Result: The correct browser may be identified. However there is no guarentee and there will be false positives and interruptions. There is a high security risk.
- including the session identifier as a parameter every GET and POST request
This will append a session identifier to each webpage call and submission, as set by the coder. This is the best of the choices here. This answer means that anyone sharing a URL will also be sharing their authentication, which can also be deeply insecure unless there are various mitigating checks carried out by the website coder.
Result: The correct browser will be identified. However there is no guarentee and there will be false positives due to URL sharing by the client user. This is the single best answer of the choices given. There is a moderate security risk.
- using the "secure cookie" header to force the browser to set a cookie
This does nothing. This will force the session cookie to be sent encrypted; which may not be appropriate if the website domain is not encrypted. This will also not work around the issue that whilst the cookie is sent ok, the browser at the other end of the communication will still refuse to accept it.
Result: This will not do anything. This does not answer the question.
Read more here: How can I send PHPSESSID in the URL?
And read the manual.