- No, GUIDs are not fully random, and most of the bits are either static or easily guessable.
- No, they re not random, see 1. There is actually a very small number of bits that are actually random, and not cryptographically strong random at that.
- It s not, see 1 and 2.
- you can, but dont need to... see my solution at the end.
- No, see 1 and 2
- Yes.
What you should be using instead of a GUID, is a cryptographically strong random number generator - use System.Security.Cryptography.RNGCryptoServiceProvider, to generate long (say, 32 bytes) string of data, then base64 encode that.
Also, assuming this is some kind of registration with sensitive data, you d want to time limit the validity of the link, say 60 minutes, or 24 hours - depends on your site.
You ll need to keep a mapping of these values to the specific users. Then you can automatically present him with the proper form as needed. Dont need to do url rewriting, just use that as the user s identifier (on this page).
Of course, dont forget this URL should be HTTPS...
Btw, 只是一份说明——在电子邮件中采用某种形式文本的良好惯例,它解释说,用户应当点击匿名电子邮件中的联系,而且通常情况下,你的网址是发的,在点击空白后,他们永远不应进入密码......。
Oh, almost forgot - another issue you should consider is what happens if the user wants several emails sent to him, e.g. hits register several times. Can he do this over and over again, and get many valid URLs? Is only the last one valid? Or maybe the same value gets resent over and over again? Of course, if an anonymous user can put in a request for this email, then DoS may become an issue... not to mention that if he puts in his own email, he can put in any random address too, flooding some poor shmuck s inbox and possibly causing your mail server to get blacklisted...
No one right answer, but needs to be considered in context of your application.