Token生成器

原创 2018年04月17日 17:17:54

首先需要调用StartGameServer启动一个计时器

/**
服务器
*/
package util

import (
	"time"
)

//服务器全局对象
var Server _serverVO

func StartGameServer() {
	//启动服务器自身的计时器与维护
	Server = _serverVO{}
	Server.TimeSec = time.Now().Unix()
	Server.LocalPath = GetCurrentDirectory()
	ticker := time.NewTicker(1 * time.Second)
	go func() {
		for _ = range ticker.C {
			Server.TimeSec = time.Now().Unix()
			Server.GoTime++
		}
	}()
	//初始化token获取器
	InitTokenSession()
	Log("开启服务器时间计时器", "Token获取器")
}

type _serverVO struct {
	TimeSec   int64  //当前系统时间秒
	GoTime    int64  //当前系统已经运行了多久时间了
	LocalPath string //当前系统的运行目录
}

//获取当前系统的毫秒时间
func (this *_serverVO) TimeMillisec() int64 {
	return time.Now().UnixNano() / 1000000
}

//获取当前系统的纳秒时间
func (this *_serverVO) TimeMicro() int64 {
	return time.Now().UnixNano() / 1000
}

之后就可以调用该文件中的各种应用函数了

//token
package util

import (
	"bytes"
	"strconv"
	"sync"
)

var TokenSession *tokenSession

//初始化InitTokenSession
func InitTokenSession() {
	TokenSession = &tokenSession{lastString: strconv.FormatInt(Server.TimeSec, 10), lastServerTime: Server.TimeSec, addTime: 0, pj: "_"}
}

//全局token获取器
type tokenSession struct {
	lastString     string
	lastServerTime int64
	addTime        int64
	buffer         bytes.Buffer
	pj             string
	sync.Mutex
}

//获取一个轻量级的Token,不经过md5,主要在程序内部使用
func (this *tokenSession) GetTokenLite() string {
	this.Mutex.Lock()
	defer this.Mutex.Unlock()
	if Server.TimeSec != this.lastServerTime {
		this.addTime = 0
		this.lastServerTime = Server.TimeSec
		this.lastString = strconv.FormatInt(this.lastServerTime, 10)
	} else {
		this.addTime++
	}
	this.buffer.Reset()
	this.buffer.WriteString(this.lastString)
	this.buffer.WriteString(this.pj)
	this.buffer.WriteString(strconv.FormatInt(this.addTime, 10))
	return this.buffer.String()
}

//获取一个完整的Token,经过md5
func (this *tokenSession) GetTokenMax() string {
	str := this.GetTokenLite()
	return MD5Hex(str)
}

//获取一个私有的token,经过md5
func (this *tokenSession) GetTokenPrivate(v interface{}) string {
	str := strconv.FormatInt(this.lastServerTime, 10) + this.pj
	switch v.(type) {
	case string:
		str = str + v.(string)
	case int:
		str = str + strconv.Itoa(v.(int))
	case int64:
		str = str + strconv.FormatInt(v.(int64), 10)
	case uint:
		str = str + strconv.FormatUint(uint64(v.(uint)), 10)
	}
	return MD5Hex(str)
}
方法中用到了sync,本人接触不久不知道是否有什么安全的又不需要加锁的方法?

不使用ATL向导,创建一个简单的ATL对话框程序.

本例使用CWindowImpl类创建对话框程序.第一步:建立一个新的Win32 Application工程.第二步:在stdafx.h中包含下面三行.      #include extern CCo...
  • sanjiang
  • sanjiang
  • 2001-09-25 12:19:00
  • 753

Token 生成简易代码

// like Ivj6eZRx40+MTx2ZvnG8nA public static string CreateToken() { Guid g = Guid.NewGuid(); ...
  • zhaoyaoxing
  • zhaoyaoxing
  • 2014-06-16 10:35:06
  • 3611

随机生成token

使用token的方式,可以控制用户在这个时间内的权限,代码如下: function genToken( $len = 32, $md5 = true ) { # Seed random n...
  • jallin2001
  • jallin2001
  • 2010-05-05 16:33:00
  • 17484

Token生成规则以及工具

Token工具package com.frank.common.utils;import com.alibaba.fastjson.JSON; import com.frank.common.enti...
  • kai_1215
  • kai_1215
  • 2017-11-08 12:03:30
  • 1797

七牛生成token链接

地址:http://jsfiddle.net/rwifeng/7rgqzpb0/3/
  • zhangyaoming2004
  • zhangyaoming2004
  • 2016-06-14 17:03:31
  • 3599

App (客户端)登录接口设计Token探究(一)

Token 的的特性: 通过随机算法生成(Hash),里面包含这个 Token 对应用户的基本信息有生命周期,(TODO)可获得剩余的生命周期可延续生命周期(TODO)可主动销毁 先看效果图:...
  • qingfeng812
  • qingfeng812
  • 2016-12-02 09:28:52
  • 2058

Web App Token验证的5个要点

原文地址:http://www.jamiekurtz.com/2014/11/25/5-keys-to-web-app-token-authentication/ 5 KEYS TO WEB A...
  • nightyk
  • nightyk
  • 2016-09-26 22:05:58
  • 1868

APP接口安全token设计

近发现群内大伙对用Hbuilder做的APP怎么做登录功能以及维护登录状态非常困惑,而我前一段时间正好稍微研究了一下,所以把我知道的告诉大家,节约大家查找资料的时间。 你是否真的需要登录功能? ...
  • b452608
  • b452608
  • 2016-03-23 23:46:05
  • 14213

七牛生成token链接

http://pchou.qiniudn.com/qiniutool/uptoken.html
  • li_haijiang
  • li_haijiang
  • 2017-05-03 18:06:47
  • 2115

微信开发(一)申请接口与token获取

简述如何写一个微信公众号开发的 Hello world
  • fansongy
  • fansongy
  • 2015-01-28 17:17:14
  • 78975
收藏助手
不良信息举报
您举报文章:Token生成器
举报原因:
原因补充:

(最多只允许输入30个字)