全局唯一的Session ID如何创建?

keke · · 12139 次点击
这个算法只能保证一台服务器唯一,多台服务器不唯一
#5
更多评论
polaris
社区,需要你我一同完善!
可以这样考虑(供参考): 获取当前时间的纳秒数```time.Now().UnixNano()```, 然后产生一个随机数字, 把随机数字和当前时间相加后加密一下(md5)。 package main import ( "fmt" "time" "math/rand" "crypto/md5" "strconv" "io" ) func main() { nano := time.Now().UnixNano() rand.Seed(nano) rndNum := rand.Int63() sessionId := Md5(Md5(strconv.FormatInt(nano, 10))+Md5(strconv.FormatInt(rndNum, 10))) fmt.Println(sessionId) } func Md5(text string) string { hashMd5 := md5.New() io.WriteString(hashMd5, text) return fmt.Sprintf("%x", hashMd5.Sum(nil)) } 到play.golang.org运行: [http://play.golang.org/p/IMSclrRieJ](http://play.golang.org/p/IMSclrRieJ)
#1
谢谢!纳秒数做种子,取随机数,一定是唯一了吧?不管并发是多高
#2