As there are not too many pages involved in it, I would suggest you to go with a hidden form field for this than using a session variable.
So when you send this link to someone
When the person whom you send this link clicks on the link, that shows him the login.asp with file=filename.zip as querystring.
1) You can store that in a hidden field of the form on login.asp by
<input type="text" name="txtDownloadFile" value="<%=Request.Querstring("file")%>">
2) Then once the user fills the email Id on this page, say it submits to "CheckEmail.asp" where you check for email existence in the DB.
''' your code for checking email address in DB.
IF <Emailexists> then
Response.Redirect("download.asp?file=" & Request.Form("txtDownloadFile"))
Response.Redirect("Createlogin.asp?file=" & Request.Form("txtDownloadFile"))
3) Case 1 - Email exists
Now within your "download.asp" you can fetch the FILENAME from the querystring as done in "login.asp" and provide a link to that file. (May be you can have a fixed folder called "C:\Download" to have those downloadable files stored into. And use that fixed path while providing the link for download.)
4) Case 2 - Create login
On Createlogin.asp, you can fetch the Querystring and store it into another hidden field, and let the user input the details asked in that page, and on submit (say "SaveData.asp") store the data into DB and fetch the FILENAME from hidden field and redirect to "download.asp?file=<HIDDENFIELDVALUE>" as said above in CHECKEMAIL.asp in the IF part.
Hope that helps.
Strive for Perfection