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

keke · 2013-03-20 12:48:43 · 12367 次点击
polaris
社区,需要你我一同完善!

应该可以保证

#3
更多评论
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

#1

谢谢!纳秒数做种子,取随机数,一定是唯一了吧?不管并发是多高

#2