go net/http包没有官方session实现,只有cookie。可是有时候保存在session更安全放心,所以还必须自己实现。可是如何创建session id呢?怎么保证这个id是唯一的?
推荐一个uuid的包[code.google.com/p/go-uuid/uuid][1]
[1]: http://code.google.com/p/go-uuid/uuid
#4
更多评论
可以这样考虑(供参考):
获取当前时间的纳秒数```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