成人激情在线一区二区,天天操天天爽天天舔天天操一操,极品人妻少妇诱惑日本,美女视频黄A视频全免费,国产成人综合在线观看,国产成:a人亚洲y品,亚洲国产久久久一区二区三区,成人日韩一区二区在线观看,天天搞天天做天天操天天要

小程序模板網(wǎng)

打造一款猜拳小程序(go+websocket+redis+mysql+小程序前端)《四》 ...

發(fā)布時間:2018-04-18 10:28 所屬欄目:小程序開發(fā)教程

本節(jié)思路:
基于本系列第二節(jié)內(nèi)容,實現(xiàn)一個websocket服務(wù)端,redis為存儲介質(zhì),以自己約定的cmd命令為簡單通訊協(xié)議,與小程序進行通訊,實現(xiàn)簡單的2人猜拳功能

cmd命令按照如下流程:
login(client->server),小程序發(fā)給服務(wù)端,登錄命令,服務(wù)端接收命令后,判斷房間人數(shù)是否已滿,未滿則保存客戶端websocket連接到列表,客戶端用戶信息存入redis,更新在線用戶列表,然后發(fā)送init(server->client)命令,通知所有在線用戶,更新在線用戶列表。

當客戶端點擊準備按鈕,發(fā)送ready(client->server)命令到服務(wù)端,服務(wù)端更新該用戶的ready標識位(存于redis),計算房間人數(shù)是否已滿,以及房間所有用戶是否都已設(shè)置ready標識位,如是,則發(fā)送start(server->client)命令給所有用戶,開始游戲。

客戶端選擇好自己的出拳信息,發(fā)送guess(client->server)命令到服務(wù)端,服務(wù)端記錄該用戶出拳數(shù)據(jù),判斷房間內(nèi)所有人都以提交guess命令,則計算最后結(jié)果,發(fā)送result(server->client)命令給所有用戶。

客戶端接收到result命令后,重新進入ready流程。

如退出小程序,客戶端發(fā)送logout(client->server)命令到服務(wù)端,服務(wù)端從列表中刪除該用戶,重新發(fā)送init(server->client)命令到所有其他在線用戶,更新在線用戶列表。

命令流程如下:
login(client->server)
init(server->client)
ready(client->server)
start(server->client)
guess(client->server)
result(server->client)
logout(client->server)

效果示意圖:
login

ready

start

result

go服務(wù)端


package main
import (
    "golang.org/x/net/websocket"
    "fmt"
    "log"
    "net/http"
    "github.com/go-redis/redis"
    "encoding/json"
    "strconv"
)
const max_room_num = 2

var (  
    JSON          = websocket.JSON              // codec for JSON  
    Message       = websocket.Message           // codec for string, []byte  
    ActiveClients = make(map[string]ClientConn) // map containing clients  //在線websocket列表
    User          = make(map[string]string)
)  

type ClientConn struct {
    websocket *websocket.Conn  
}

type UserMsg struct {
    Room string
    Cmd string
    User string
    AvatarUrl string
    Content string
    Uuid string
    HandNum string
    GuessNum string
}

type UserInfo struct {
    User string
    AvatarUrl string
    Uuid string
}

type ReplyMsg struct {
    Room string
    Cmd string
    Data string
}

type GuessResult struct {
    Result string
    CurrentNum int
    HandRecord map[string]string
    GuessRecord map[string]string
}

func echoHandler(ws *websocket.Conn) {
    var err error  
    var userMsg UserMsg
    
    for {  

        var data []byte
        if err = websocket.Message.Receive(ws, &data); err != nil {  
            fmt.Println("can't receive")  
            break  
        }

        err = json.Unmarshal(data, &userMsg)  
        fmt.Println(userMsg)

        go wsHandler(ws,userMsg)

    }  

}

func wsHandler(ws *websocket.Conn,userMsg UserMsg) {
    sockCli := ClientConn{ws}
    var err error


    redisClient := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
    })

    //登錄
    if userMsg.Cmd == "login" {
        fmt.Println("login") 
        //判斷房間人數(shù)是否已滿
        checkNumTmp := redisClient.SCard(userMsg.Room)
        checkNum := checkNumTmp.Val()
        if(checkNum < max_room_num) {
            fmt.Println("checkNum success") 
            //socket用戶列表新增當前用戶websocket連接
            ActiveClients[userMsg.Uuid] = sockCli
            //用戶uuid保存到redis房間set集合內(nèi)
            redisClient.SAdd("ROOM:"+userMsg.Room,userMsg.Uuid)

            var me UserInfo

            me.User = userMsg.User
            me.AvatarUrl = userMsg.AvatarUrl
            me.Uuid = userMsg.Uuid

            //生成用戶信息json串
            b, err := json.Marshal(me)
            if err != nil {
                fmt.Println("Encoding User Faild")
            } else {
                //保存用戶信息到redis
                redisClient.Set("USER:"+me.Uuid,b,0)

                //初始化用戶
                initOnlineMsg(redisClient,userMsg)

            }
        } else {
            var rm ReplyMsg
            rm.Room = userMsg.Room
            rm.Cmd = "loginFailed"
            rm.Data = "登錄失敗,人數(shù)已滿"

            sendMsg,err2 := json.Marshal(rm)
            sendMsgStr := string(sendMsg)
            fmt.Println(sendMsgStr) 
            if err2 != nil {
                
            } else {
                if err = websocket.Message.Send(ws, sendMsgStr); err != nil {  
                    log.Println("Could not send UsersList to ", userMsg.User, err.Error())  
                }
            }
        }

    //準備
    } else if userMsg.Cmd == "ready" {

        redisClient.Set("READY:"+userMsg.Uuid,"ready",0)

        //從redis取房間內(nèi)的所有用戶uuid
        roomSlice := redisClient.SMembers("ROOM:"+userMsg.Room)
        //用戶uuid保存到一個go切片online 
        online := roomSlice.Val()

        i := 0

        //循環(huán)取在線用戶個人信息
        if len(online) != 0 {
            for _, na := range online {  
                if na != "" {  
                    userJson := redisClient.Get("READY:"+na)
                    userJson2 := userJson.Val()
                    if userJson2 == "ready" {
                        i++
                    }
                }  
            }
        }
        if i == len(online) && i == max_room_num {
            var rm ReplyMsg
            rm.Room = userMsg.Room
            rm.Cmd = "start"
            rm.Data = ""

            broadcast(redisClient,userMsg,rm)
        }

    //退出
    } else if userMsg.Cmd == "logout" {
        fmt.Println("logout") 

        //socket用戶列表刪除該用戶websocket連接
        delete(ActiveClients,userMsg.Uuid)
        //從redis房間set集合內(nèi)刪除該用戶uuid
        redisClient.SRem("ROOM:"+userMsg.Room,userMsg.Uuid)

        //初始化用戶
        initOnlineMsg(redisClient,userMsg)


    //出拳
    } else if userMsg.Cmd == "guess" {
        var result string
        fmt.Println("guess")
        fmt.Println(userMsg.HandNum)
        fmt.Println(userMsg.GuessNum)

        myHandNum,_ := strconv.Atoi(userMsg.HandNum)
        myGuessNum,_ := strconv.Atoi(userMsg.GuessNum)

        redisClient.Set("HANDNUM:"+userMsg.Uuid,myHandNum,0)
        redisClient.Set("GUESSNUM:"+userMsg.Uuid,myGuessNum,0)


        //從redis取房間內(nèi)的所有用戶uuid
        roomSlice := redisClient.SMembers("ROOM:"+userMsg.Room)
        //用戶uuid保存到一個go切片online 
        online := roomSlice.Val()

        
        i := 0

        //循環(huán)取在線用戶
        if len(online) != 0 {
            for _, na := range online {  
                if na != "" {  
                    handnumCmd := redisClient.Get("HANDNUM:"+na)
                    handnum := handnumCmd.Val()
                    if handnum != "" {
                        i++
                    }
                }  
            }
        }

        //房間內(nèi)所有人都已提交,則計算最后結(jié)果
        if i == len(online) && i == max_room_num {
            var handRecordList map[string]string
            handRecordList = make(map[string]string)
            var guessRecordList map[string]string
            guessRecordList = make(map[string]string)

            //計算正確結(jié)果currentNum
            currentNum := 0
            //循環(huán)取在線用戶
            if len(online) != 0 {
                for _, na := range online {  
                    if na != "" {  
                        //取某用戶的出拳數(shù)據(jù),已用戶名為key,存入結(jié)果map
                        handnumCmd := redisClient.Get("HANDNUM:"+na)
                        handnum := handnumCmd.Val()
                        
                        guessnumCmd := redisClient.Get("GUESSNUM:"+na)
                        guessnum := guessnumCmd.Val()   

                        userJson := redisClient.Get("USER:"+na)
                        userJson2 := userJson.Val()

                        var user UserInfo
                        json.Unmarshal([]byte(userJson2), &user)

                        handRecordList[user.User] = handnum
                        guessRecordList[user.User] = guessnum

                        //計算結(jié)果
                        thandnum,_ := strconv.Atoi(handnum)
                        currentNum = currentNum + thandnum
                    }  
                }
            }

            //給各個用戶發(fā)送結(jié)果消息
            if len(online) != 0 {
                for _, na := range online { 
                    if na != "" {
                        guessnumCmd := redisClient.Get("GUESSNUM:"+na)
                        guessnum := guessnumCmd.Val()
                        tguessnum ,_ := strconv.Atoi(guessnum)
                        if tguessnum == currentNum {
                            result = "1"
                        } else {
                            result = "0"
                        }
                        var guessResult GuessResult
                        guessResult.Result = result
                        guessResult.CurrentNum = currentNum
                        guessResult.HandRecord = handRecordList
                        guessResult.GuessRecord = guessRecordList

                        resultTmp,_ := json.Marshal(guessResult)
                        resultData := string(resultTmp)

                        //刪除用戶準備狀態(tài)
                        redisClient.Del("READY:"+na)
                        //刪除用戶猜拳數(shù)據(jù)
                        redisClient.Del("HANDNUM:"+na)
                        redisClient.Del("GUESSNUM:"+na)

                        var rm ReplyMsg
                        rm.Room = userMsg.Room
                        rm.Cmd = "result"
                        rm.Data = resultData

                        sendMsg,_ := json.Marshal(rm)
                        sendMsgStr := string(sendMsg)

                        if err = websocket.Message.Send(ActiveClients[na].websocket, sendMsgStr); err != nil {  
                            log.Println("Could not send UsersList to ", "", err.Error())  
                        }


                    }
                }
            }
        }

    //發(fā)消息
    } else {
        /*
        //從redis取房間內(nèi)的所有用戶uuid
        roomSlice := redisClient.SMembers(userMsg.Room)
        //用戶uuid保存到一個go切片online 
        online := roomSlice.Val()

        //循環(huán)給房間內(nèi)用戶發(fā)送消息
        if len(online) != 0 {
            for _, na := range online {  
                if na != "" {  
                    //ActiveClients[na].websocket就是用戶對應(yīng)的websocket鏈接
                    if err = websocket.Message.Send(ActiveClients[na].websocket, userMsg.User+"說:"+userMsg.Content); err != nil {  
                        log.Println("Could not send message to ", userMsg.User, err.Error())  
                    }  
                }  
            }
        }*/


    }
}

//房間成員初始化,有人加入或者退出都要重新初始化,相當于聊天室的在線用戶列表的維護
func initOnlineMsg(redisClient *redis.Client,userMsg UserMsg) {
    
    var err error

    //從redis取房間內(nèi)的所有用戶uuid
    roomSlice := redisClient.SMembers("ROOM:"+userMsg.Room)
    //用戶uuid保存到一個go切片online 
    online := roomSlice.Val()

    var onlineList []string

    //循環(huán)取在線用戶個人信息
    if len(online) != 0 {
        for _, na := range online {  
            if na != "" {  
                userJson := redisClient.Get("USER:"+na)
                userJson2 := userJson.Val()
                onlineList = append(onlineList,userJson2)
            }  
        }
    }
    fmt.Println("get online success") 
    //生成在線用戶信息json串
    //c, err := json.Marshal(onlineList)

    onlineListStr,err2 := json.Marshal(onlineList)

    var rm ReplyMsg
    rm.Room = userMsg.Room
    rm.Cmd = "init"
    rm.Data = string(onlineListStr)

    sendMsg,err2 := json.Marshal(rm)
    sendMsgStr := string(sendMsg)
    fmt.Println("init") 
    if err2 != nil {
        
    } else {
        //給所有用戶發(fā)初始化消息
        if len(online) != 0 {
            for _, na := range online {  
                if na != "" {                   
                    if err = websocket.Message.Send(ActiveClients[na].websocket, sendMsgStr); err != nil {  
                        log.Println("Could not send UsersList to ", "", err.Error())  
                    }
                }
            }
        }
        //若房間人數(shù)滿,發(fā)送就緒消息
        if len(online) >= max_room_num {
            fmt.Println("full")
            var rm ReplyMsg
            rm.Room = userMsg.Room
            rm.Cmd = "full"
            rm.Data = ""

            sendMsg,_ := json.Marshal(rm)
            sendMsgStr := string(sendMsg)

            for _, na := range online {  
                if na != "" {                   
                    if err = websocket.Message.Send(ActiveClients[na].websocket, sendMsgStr); err != nil {  
                        log.Println("Could not send UsersList to ", "", err.Error())  
                    }
                }
            }
        }
    }
    
}

//廣播消息
func broadcast(redisClient *redis.Client,userMsg UserMsg,rm ReplyMsg) {
    var err error

    //從redis取房間內(nèi)的所有用戶uuid
    roomSlice := redisClient.SMembers("ROOM:"+userMsg.Room)
    //用戶uuid保存到一個go切片online 
    online := roomSlice.Val()

    sendMsg,err2 := json.Marshal(rm)
    sendMsgStr := string(sendMsg)
    fmt.Println("broadcast") 
    if err2 != nil {
        
    } else {
        //給所有用戶發(fā)消息
        if len(online) != 0 {
            for _, na := range online {  
                if na != "" {                   
                    if err = websocket.Message.Send(ActiveClients[na].websocket, sendMsgStr); err != nil {  
                        log.Println("Could not send UsersList to ", "", err.Error())  
                    }
                }
            }
        }
    }
}

func main() {
    http.Handle("/echo", websocket.Handler(echoHandler))
    http.Handle("/", http.FileServer(http.Dir(".")))

    err := http.ListenAndServe(":8929", nil)

    if err != nil {
        panic("ListenAndServe: " + err.Error())
    }
}

小程序代碼:
app.js


//app.js
App({
  onLaunch: function () {
    console.log("App生命周期函數(shù)——onLaunch函數(shù)");
  },
  checkSession:function(mysessionid) {
    return new Promise(function(resolve, reject) {
      wx.request({
        url: 'https://xxx.xxxxx.com/check.php',
        header: {
          sessionid:mysessionid
        },
        success: function(res) {
          console.log("檢查sessionid是否有效")
          resolve(res.data)
        },
        fail: function(e) {
          reject(e)
        }
      })
    })
  },
  login:function() {
    return new Promise(function(resolve, reject) {
      wx.login({
        success: function (res0) {
          if (res0.code) {
            wx.request({
              url: 'https://xxx.xxxxx.com/login.php',
              data: {
                code: res0.code
              },
              header: {
                  'content-type': 'application/json'
              },
              success: function(res) {
                console.log("取得新的sessionid")
                console.log(res.data)
                var mysessionid = res.data.k
                wx.setStorageSync("mysessionid",mysessionid)
                var myuuid = res.data.v
                wx.setStorageSync("myuuid",myuuid)
                resolve(mysessionid)
              },
              fail: function(e) {
                reject(e)
              }
            })
          }
        }
      })
    })
  },
  getWxUserInfo:function() {
    return new Promise(function(resolve, reject) {
      wx.getUserInfo({
        withCredentials: false,
        success: function(res) {
          console.log("取得新的userInfo")
          var userInfo = res.userInfo
          wx.setStorageSync("userInfo",userInfo)
          console.log("setUserInfo")
          resolve(userInfo)
        }
      })
    })
  },
  getUserInfo:function() {
    var that = this
    return new Promise(function(resolve, reject) {
      var mysessionid = wx.getStorageSync('mysessionid')
      if(mysessionid) {
        console.log("sessionid存在")
        that.checkSession(mysessionid).then(function(sessionContent){
          if(sessionContent == 0) {
            console.log("sessionid無效-取userInfo存到本地")
            that.login().then(function(){
              that.getWxUserInfo().then(function(userInfo){
                resolve(userInfo)
              })
            })
          } else {
            console.log("sessionid有效-直接取本地userInfo")
            var userInfo = wx.getStorageSync("userInfo")
            resolve(userInfo)
          }
        })
        
      } else {
        console.log("sessionid不存在,重新走登錄流程")
        that.login().then(function(){
          that.getWxUserInfo().then(function(userInfo){
            resolve(userInfo)
          })
        })
      }
    })
  },
  globalData:{
    userInfo:null,
    onlineList:[],
    onlineStatus:false,
    myHandNum:0,
    myGuessNum:0
  }
})

page/index.js


//index.js
//獲取應(yīng)用實例
var app = getApp()
Page({
  data: {
    userInfo: {},
    onlineList:{},
    status:0,
    statusStr:"等待中",
    guessBoxStatus:"hideBox",
    handList:['0','1','2','3','4','5'],
    handStyleList:['primary','default','default','default','default','default'],
    guessList:['0','1','2','3','4','5','6','7','8','9','10'],
    guessStyleList:['primary','default','default','default','default','default','default','default','default','default','default'],
    buttonList:['0','1','2'],
    buttonStrList:['準備','開始','提交'],
    buttonStyleList:['btnShow','btnHide','btnHide'],
    buttonFuncList:['ready','start','guess']
  },
  onLoad: function () {
    console.log("Page onLoad函數(shù)");
    wx.playBackgroundAudio({
      dataUrl: 'https://xxx.xxxxx.com/8585.mp3',
      title: '古琴音效',
      coverImgUrl: 'https://xxx.xxxxx.com/logo.png',
      success: function() {
        console.log("播放音效")
      }
    })
  },
  onHide: function() {
    console.log('發(fā)送注銷消息')
    var myuuid = wx.getStorageSync('myuuid')
    var msg = new Object();
    msg.Room = '1';
    msg.Cmd = 'logout';
    msg.Uuid = myuuid;
    var str = JSON.stringify(msg)
    wx.sendSocketMessage({
      data:str
    })
    wx.closeSocket()
    app.globalData.onlineStatus = false
  },
  onShow: function() {
    var that = this
    app.getUserInfo().then(function(userInfo){
      that.setData({
        userInfo:userInfo
      })
      that.wsHandler(userInfo)
      that.initBox()
    })
  },
  wsHandler: function(userInfo) {
    var that = this

    //websocket
    wx.connectSocket({
      url: 'wss://xx.xxxxx.com/echo'
    })
    wx.onSocketOpen(function(res) {
      console.log('WebSocket連接已打開!')
      var myuuid = wx.getStorageSync('myuuid')
      var msg = new Object();
      msg.Room = '1';
      msg.Cmd = 'login';
      msg.User = userInfo.nickName;
      msg.AvatarUrl = userInfo.avatarUrl;
      msg.Uuid = myuuid;
      var str = JSON.stringify(msg)
      wx.sendSocketMessage({
        data:str
      })
    })
    wx.onSocketMessage(function(res) {
      var msg = JSON.parse(res.data)
      if(msg.Cmd == 'init') {
        var userList = JSON.parse(msg.Data)
        app.globalData.onlineList = []
        for(var i=0;i<userList.length;i++){
          var user = JSON.parse(userList[i])
          app.globalData.onlineList.push(user)
        }

        that.setData({
          onlineList:app.globalData.onlineList,
          status:0,
          statusStr:'等待中'
        })
      }
      if(msg.Cmd == 'full') {
        that.setData({
          status:1,
          statusStr:'準備開始'
        })
      }
      if(msg.Cmd == 'result') {
        
        var result = JSON.parse(msg.Data)

        var content = "總數(shù)為"+result.CurrentNum+"\n"
        for (var value in result.HandRecord) {
          content = content+value+"出拳:"+result.HandRecord[value]+"\n";
        }
        for (var value in result.GuessRecord) {
          content = content+value+"猜拳:"+result.GuessRecord[value]+"\n";
        }

        if(result.Result == 1) {
          content = "恭喜你,猜中啦\n" + content
          wx.showModal({
            content: content,
            showCancel: false,
            success: function (res) {
                if (res.confirm) {
                    that.initBox()
                }
            }
          });
        }
        if(result.Result == 0) {
          content = "很遺憾,猜錯啦\n" + content
          wx.showModal({
            content: content,
            showCancel: false,
            success: function (res) {
                if (res.confirm) {
                    that.initBox()
                }
            }
          });
        }
        
      }
      if(msg.Cmd == 'start') {
        that.setData({
          status:2,
          statusStr:'游戲中',
          guessBoxStatus:'showBox',
          buttonStyleList:['btnHide','btnHide','btnShow'],
        })
      }
      
    })
  },
  setHandNum: function(event) {
    var that = this
    console.log(event.target.dataset.handnum)
    app.globalData.myHandNum = event.target.dataset.handnum
    var myList = that.data.handStyleList
    for(var i=0;i<myList.length;i++) {
      if(i == event.target.dataset.handnum) {
        myList[i] = 'primary'
      } else {
        myList[i] = 'default'
      }
    }
    that.setData({
      handStyleList:myList
    })
  },
  setGuessNum: function(event) {
    var that = this
    console.log(event.target.dataset.guessnum)
    app.globalData.myGuessNum = event.target.dataset.guessnum
    var myList = that.data.guessStyleList
    for(var i=0;i<myList.length;i++) {
      if(i == event.target.dataset.guessnum) {
        myList[i] = 'primary'
      } else {
        myList[i] = 'default'
      }
    }
    that.setData({
      guessStyleList:myList
    })
  },
  guess: function() {
    var that = this
    var userInfo = that.data.userInfo
    var myuuid = wx.getStorageSync('myuuid')
    var msg = new Object();
    msg.Room = '1';
    msg.Cmd = 'guess';
    msg.User = userInfo.nickName;
    msg.AvatarUrl = userInfo.avatarUrl;
    msg.Uuid = myuuid;
    msg.HandNum = app.globalData.myHandNum
    msg.GuessNum = app.globalData.myGuessNum
    var str = JSON.stringify(msg)
    wx.sendSocketMessage({
      data:str
    })
  },
  ready: function() {
    var that = this
    var userInfo = that.data.userInfo
    var myuuid = wx.getStorageSync('myuuid')
    var msg = new Object();
    msg.Room = '1';
    msg.Cmd = 'ready';
    msg.User = userInfo.nickName;
    msg.AvatarUrl = userInfo.avatarUrl;
    msg.Uuid = myuuid;
    var str = JSON.stringify(msg)
    wx.sendSocketMessage({
      data:str
    })
    that.setData({
      status:1,
      statusStr:'等待對手,準備開始',
      buttonStyleList:['btnHide','btnHide','btnHide'],
    })
    
  },
  start: function() {
    var that = this
    var userInfo = that.data.userInfo
    var myuuid = wx.getStorageSync('myuuid')
    var msg = new Object();
    msg.Room = '1';
    msg.Cmd = 'start';
    msg.User = userInfo.nickName;
    msg.AvatarUrl = userInfo.avatarUrl;
    msg.Uuid = myuuid;
    var str = JSON.stringify(msg)
    wx.sendSocketMessage({
      data:str
    })
  },
  initBox: function() {
    var that = this
    that.setData({
      status:0,
      statusStr:"等待中",
      guessBoxStatus:"hideBox",
      handList:['0','1','2','3','4','5'],
      handStyleList:['primary','default','default','default','default','default'],
      guessList:['0','1','2','3','4','5','6','7','8','9','10'],
      guessStyleList:['primary','default','default','default','default','default','default','default','default','default','default'],
      buttonList:['0','1','2'],
      buttonStrList:['準備','開始','提交'],
      buttonStyleList:['btnShow','btnHide','btnHide'],
      buttonFuncList:['ready','start','guess']
    })
  },
  getAudioStatus: function() {
    wx.getBackgroundAudioPlayerState({
      success: function(res) {
          var status = res.status
          var dataUrl = res.dataUrl
          var currentPosition = res.currentPosition
          var duration = res.duration
          var downloadPercent = res.downloadPercent
          console.log("音樂狀態(tài)"+status)
          console.log("音樂長度"+duration)
      }
    })
  }
})

ps:播放音樂的功能,在開發(fā)工具可以看到,真機上沒有聽到聲音,暫時還沒找到解決辦法
代碼的健壯性,頁面效果還需要再優(yōu)化

check.php


<?php

$post_data = $_POST;
$header = get_all_headers();

$sessionid = $header['sessionid'];

$host = '127.0.0.1';
$port = '6379';
$timeout = 0;

$redis = new Redis();
$redis->connect($host, $port, $timeout);
$session_content = $redis->get("miniappsession:".$sessionid);
if($session_content)
{
    echo $session_content;
} else {
    echo 0;
}

/**
 * 獲取自定義的header數(shù)據(jù)
 */
function get_all_headers(){

    // 忽略獲取的header數(shù)據(jù)
    $ignore = array('host','accept','content-length','content-type');

    $headers = array();

    foreach($_SERVER as $key=>$value){
        if(substr($key, 0, 5)==='HTTP_'){
            $key = substr($key, 5);
            $key = str_replace('_', ' ', $key);
            $key = str_replace(' ', '-', $key);
            $key = strtolower($key);

            if(!in_array($key, $ignore)){
                $headers[$key] = $value;
            }
        }
    }

    return $headers;

}

login.php


<?php
$code = $_GET['code'];
define("APPID",'xxxxxxxxxxxxxxxxxxxxx');
define("SECRET",'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=".APPID."&secret=".SECRET."&js_code=".$code."&grant_type=authorization_code";
$rs = curlGet($url);

$arr = json_decode($rs);

$str = randomFromDev(32);

$host = '127.0.0.1';
$port = '6379';
$timeout = 0;

$redis = new Redis();
$redis->connect($host, $port, $timeout);
$expires_time = 15*24*60*60;
$session_content = md5($arr->openid.$expires_time);
$redis->setex("miniappsession:".$str,$expires_time,$session_content);

$sessionObj['k'] = $str;
$sessionObj['v'] = $session_content;
echo json_encode($sessionObj);


function randomFromDev($len)
{
    $fp = @fopen('/dev/urandom','rb');
    $result = '';
    if ($fp !== FALSE) {
        $result .= @fread($fp, $len);
        @fclose($fp);
    }
    else
    {
        trigger_error('Can not open /dev/urandom.');
    }
    $result = md5($result);
    // convert from binary to string
    //$result = base64_encode($result);
    // remove none url chars
    //$result = strtr($result, '+/', '-_');
    // Remove = from the end
    //$result = str_replace('=', ' ', $result);
    return $result;
}

function curlGet($url, $method = 'get', $data = '')
{
    $ch = curl_init();
    $header = 'Accept-Charset: utf-8';
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper($method));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $temp = curl_exec($ch);
    return $temp;
}


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://m.chqfk.com/wxmini/doc/course/23652.html 復(fù)制鏈接 如需定制請聯(lián)系易優(yōu)客服咨詢: 點擊咨詢
在線客服
易小優(yōu)
轉(zhuǎn)人工 ×
亚洲一区二区视频在线免费观看| 91麻豆精品国产乱码久久久久久| heyzo久久综合色88| 色婷婷亚洲久久97成人| 在线视频一视频二视频三| 久久视频十八岁亚洲精品久久视频| 亚洲国产成人在线观看网址| av网站在线免费浏览| 性色av一区二区三区观看| 国产精品啊啊啊不要在线观看| 在线观看小视频国产| 日日躁夜夜躁狠狠久久av| 99久久精品国产欧美一区二区| 免费在线观看网址你懂的| 成年大片40分钟免费视频播放| 久精彩视频免费观看| 啪啪小视频免费网站| 免费无码专区毛片高潮喷水| 欧美日韩国产在线观看了| 国产盗摄女子私密保健视频| 午夜剧场欧美一区二区| 国产一线女人天堂av| 国产免费一级高清淫日本片| 在线精品亚洲区一区二区| 蜜桃aⅴ噜噜一区二区三区网址| 国语对白xxxx乱大交| 性感的人妻在线观看| caoporn香蕉在线观看| 国产无遮挡精品视频观看| 天天干天天操天天日天天射| 亚洲精品少妇久久久久久| 国内精品久久久久精品爽爽| 在线理论国产高清在线| 隔壁老王国产在线观看| 搡四十路e五十路熟女av| 污污污污国产免费入口处| 精品国产日韩一区三区| 色淫骚色色色色色色美女| 欧美精品日韩第一页| 日本v片 中文字幕| 日本高清插阴视频免费| 黄色免费2b网页18岁有声音| 91精彩刺激对白露脸偷拍| 天天干夜夜操日日操| 黄色免费2b网页18岁有声音| 婷婷av一区二区三区7| 挺进老妇的肉91九色| 美女被弄高潮喷水91视频9| 国产剧情免费在线观看| 91久久国产丁香精品中文| 欧洲日韩视频一区二区三区| 久草免费资源视频在线观看 | r人人妻人人澡人人爽| 亚洲欧美日韩偷窥自拍| 国产三级做爰高清在线| 欧洲日本亚洲一区二区| 欧美一区视频不卡高清| 人妻久久免费视频中文字幕| 狠狠躁日日躁夜夜躁2| 东北老熟女疯狂作爱视频| 丝袜美腿视频诱惑亚洲| 成人免费视频国产免费麻豆下| 亚洲精品乱码久久观看网| 国产免费av不卡免费| 国产欧美日韩经典一区| 东方av在线免费进入| 97人妻人人做人碰人人爽一| 国产视频在线精品视频| 欧美大长腿美女抽插网站| 欧美一区二区蜜桃视频| 中文字幕精品av在线观看| fc2精品成人免费观看| 久久亚洲日本精品视频| 亚洲女同性同志熟女女同| 办公室被吃奶好爽在线观看视频 | 美女 激情 欧美 日韩| 日韩欧美亚洲在线第一页| 亚洲av永久久久久久久蜜桃| av网站资源在线观看| 一区二区三区在线中国| 久草视频免费在线视频观看| 久久久久久久久久久蜜桃| 国产熟女一区二区三区四| 欧美日韩无卡一二三区| 人妻天天操avxx| 久久三级片一区二区毛片| 亚洲自偷自拍另类18p| 一区二区三区亚洲蜜桃| 亚洲视频免费观看不卡| 亚洲欧美另类激情综合区动漫| 天天操天天射天天综合网| 久久精品国产9久久综合| 亚洲欧美在线x视频| 丰满雪白人妻人爽16av精品| 国产在线免播放器不卡| 婷婷av一区二区三区7| 青青操国产精品视频在线| 91精品国产综合久久婷婷香蕉| 亚洲天堂欧美中文字幕| 天天日天天色天天摸| av网站在线免费浏览| 蜜桃精品在线观看一区| 日本五十路六十路中出| 天天色天天操综合网| 中文字幕日本一本二本三区| 日韩美女精品一在线观看| 2012在线国语中文字幕| 日韩精选高清大片在线观看| 午夜啪啪啪免费视频网站| 俄罗斯第一次处破女| 女人看了很爽的一级女毛片| 欧美日韩精品久久一区二区三区| 黄色 成年人 免费观看| 日本老熟妇色狠狠一区| 成人熟女一区二区三区| 黄色中文字幕在线观看| 五月天开心激情深爱激情| 亚洲激情视频免费在线| 91精品国产国语自拈产在| 在线精品亚洲区一区二区| 五月色婷婷在线视频| 国产又粗又长又硬又猛又黄的视频 | 亚洲福利导航在线视频| 97久久精品熟女超碰| 蜜桃av在线网址观看| 在线免费观看欧美激情视频| 欧美av色香蕉一区二区小说| 久久草大香蕉在线视频| 日本熟妇丰满厨房55| 亚洲欧洲自拍他拍av| 99久久精品免费看蜜桃的推荐词| 久re这里只有精品视频| 久久亚洲伊人99精品影院| 男人天堂新在线电影| 亚洲三级伦理在线播放| 欧美图色 亚洲图色| 国产中文字幕在线免费播放| 亚洲av永久久久久久久蜜桃| 草草影院黄色在线观看| 亚洲成av中文字幕| 日韩av卡一卡二卡三| 午夜网在线观看视频| 日韩毛片综合在线观看网站| 日韩欧美亚洲一区第一| r人人妻人人澡人人爽| 欧美一级特黄aaaaaa片| 国语对白xxxx乱大交| 一级白丝美女久久久久| 一级白丝美女久久久久| 国产视频精品在线免费观看| 筱田优在线播放一区二区三区| 欧美亚洲国产校园春色 | 伊人青青青在线观看| 亚洲精品一区二区三区新线路| 筱田优在线播放一区二区三区| 精品国产日韩一区三区| 99精品热视频在线观看| 91精品国产综合久久婷婷香蕉| 手机视频在线观看99精品视频 | 日本免费啪啪啪啪啪啪啪啪啪啪| 手机视频在线观看99精品视频| 教资是不是人人都可以考| 日韩国产精品高清中文在线| 看男破处女人逼黄色片观看| 亚洲国产成人在线观看网址| 亚洲欧洲另类小说图片| 精品99久久久久久www| 国产欧美日韩经典一区| 最大最全av中文字幕网| 欧美xxxx视频在线| 天天插天天色天天透| 51日日夜夜精品视频| 日韩成人在线电影,| 手机视频在线观看99精品视频| 亚洲精品在线观看高清资源| 要看tv在线观看欧美日韩| 成人免费视频国产免费麻豆下| 96h久久国产激情| 程嘉美日本全部三级| 美女av网站在线观看| 久久三级片一区二区毛片| Av资源站中文字幕| 亚洲人人妻一区二区三区| 1717精品视频在线观看| 色男人的天堂一区二区三区| 超级碰碰碰碰碰碰碰碰碰| 先锋资源在线观看国产精品| 中文字幕亚洲日韩第一页| 亚洲欧美日韩偷窥自拍| 亚洲偷偷自拍视频网| 在线91精品亚洲网站精品成人| 国产专区视频在线观看免费| 丝袜美腿国产在线观看| 女人被男人阳具抽插的呻吟视频| 五月天免费在线观看| 99精品私筹模特大尺度视频| 视频在线观看免费99| 人妻天天爽夜夜爽麻豆av| 亚洲少妇av在线播放| 77777蜜臀精品久久综合| 黑人精品一区a一二区b| 成人黄色大全在线观看| 亚洲图色熟女五月天| 天天色天天情天天透| 欧美激情在线观看新地址| 亚洲主要位于五带中的什么带?| 国产午夜福利精品久久不卡| 999在线视频一区二区三区| 熟女人妻av中文字幕| 日韩avapp在线| 干 白虎 少妇 嫩 逼 视频| 熟女人妻av中文字幕| 亚洲男人天堂111117av| 二亚洲女同性同志熟女| 久久精品在线观看免费视频| 国模视频写真一区二区| 久久精品视频全部视频在线| 福利视频国产在线在线观看| 成人一级黄色片免费看 | 国产精品自拍亚洲春色| 人妻久久免费视频中文字幕| 特黄特色大片观看免费 | 天天日天天添天天爽| 欧美中文字幕综合在线| 东京热av在线播放| 国产精品福利免费视频不卡| 在线观看av久久久| 美女的逼让男人桶的视频| 国内精品久久久久精品爽爽| 午夜三级影片免费播放| 男人爽爽女人的视频一区二区三区| 欧美福利视频一二三| 91麻豆精品一二三区在线成人| 久久久亚洲精品熟妇少妇| 97午夜精品理论片在线| 欧美日韩综合在线免费观看 | 亚洲欧美日韩不卡人妻中文字幕| 免费二区三区四区在线观看| 2020中文字幕在线播放| 天天日天天添天天爽| 免费观看黄色韩日av| 爆操嫩逼黑丝袜美女小骚逼| 午夜精品久久久久久99| 亚洲va欧美va人人爽午夜| 午夜在线小视频在线观看| 新婚人妻聚会被中出| av中文字幕高清在线| 亚洲欧洲美洲无码在线| 好吊视频一区二 区三区视频| 办公室被吃奶好爽在线观看视频| 163黄页网在线观看,| 国产免费一级高清淫日本片| 欧美大长腿美女抽插网站| 97人妻人人做人碰人人爽一| 中文字幕精品av在线观看| 日本少妇人妻久久中文| 手机视频在线观看99精品视频| 久久99精品久久久久久小说| 天天操天天湿天天干| 一区二区三区亚洲蜜桃| 一区二区中文字幕18| 亚洲日本欧洲一区二区| 浪荡人妻共32部分黑人| 国产一级二级三级亚洲| 变态另类97人妻av| 伊人大香线蕉亚洲五月天| 免费在线观看国产成人大片| 大肉大捧一进一出免费视频网址| 蜜桃一区二区17c| 91精品久久久久久婷婷高清| 久久精品国产亚洲AV牛牛影视| 国产日视频在线观看| 天天色天天干天天操| 偷拍自拍视频图片免费| 日韩精品高清免费视频| 销魂少妇一区二区视频| 中文字幕一区三区二区国产黄色 | 亚洲国产中文字幕在线视频 | 日韩毛片基地免费看| 2022AV天堂免费在线观看| 亚洲自拍偷拍清纯唯美| 日本老熟妇色狠狠一区| 91人妻人人做人人爽九色全集 | 欧美亚洲三级色图网站| 亚洲妇熟xxxx妇色黄网站| 欧美熟妇搡bbbb水蜜桃| 9797人人妻人人澡| 日韩国产精品高清中文在线| 国产av综合av国产精品| 国产又粗又长又硬又猛又黄的视频| 日本av都是真做吗| 国产视频在线精品视频| 丰满的女教师bd视频| 无套内谢少妇高潮毛片免费看 | 国产大神一区二区三区| 亚洲天堂 校园春色| 亚洲成年人三级电影| 天天插天天爱天天日| 小少妇被大鸡巴操手机在播放| 国产成人啪精品视频免费| 色综合久久激情综合久久| 国产av一区二区三区天堂| 老鸭窝在线视频国产| 国产精品久久久久白浆| 163黄页网在线观看,| 爱人体-看人体人体摄影| 国产精品精品3d动漫| 亚洲 欧洲 国产 麻豆| 一区二区三区欧美高清| 18人妻人碰人人做人人爽| 欧美丝袜熟女日韩亚洲| 欧美,偷拍,另类,综合| 亚洲国产久久久久久| 在线观看免费a亚洲| 2020精品国产自在现线官网 | 青青热久免费精品视频21| 天天舔天天做天天爱| 久久人人爽人人爽人人亚洲| 亚洲天堂一二三四在线播放| 青草视频在在线成人av| 国产精品黄色自拍视频| 亚洲少妇av在线播放| 国产超碰人人爽人人做夜色资源| 久精彩视频免费观看| 日本日本熟妇中文在线视频| 色片免费在线观看喷水| 狠狠操 在线视频 轻轻草| 亚洲中文有码一区二区| 古典武侠校园春色亚洲| 91嫩草精品少妇97九九| 人妻天天操avxx| 精品99久久久久久www| 91九色porny国产探花| 天天日天天看天天摸| 亚洲,自拍,中文,另类| 亚洲图色熟女五月天| 适合黄黑皮的显白发色| 爆操嫩逼黑丝袜美女小骚逼| 天天摸天天干天天插天天操| 97超碰在线视频观看| 农村女人91熟女熟妇| 亚洲人成亚洲人成在线观看com | 2022AV天堂免费在线观看| 日本伦理在线免费视频| 销魂少妇一区二区视频| 伊人大香线蕉亚洲五月天| 制服丝袜诱惑综合网| Av资源站中文字幕| 4个黑人操素人视频网站精品91| 午夜福利久久久国产视频| 久久性视频不卡网站| 亚洲视频 中文字幕 人妻| 超级碰碰碰碰碰碰碰碰碰| 久久中文字幕av观看| 极品人妻vide0sss人妻| 美女诱惑福利在线视频| 国产熟妇一区二区三区av| 98资源站精品视频在线观看| 亚洲 网友 在线 观看| 欧美激情性做爰视频| 97人妻碰碰碰久久久| 91福利国产成人精品| 操人妻免费视频观看| 99精品国产免费久久久久久| 久久久亚洲精品熟妇少妇| av一区二区二十四小时| 亚洲卡一卡二卡三新区| 国产午夜福利精品久久不卡| 亚洲综合一区二区人妻| 成人一级黄色片免费看| 最大最全av中文字幕网| 精品视频在线观看久久| 高清日本欧美亚洲视频| 亚洲小说区图片另类春色| 亚洲国产日韩欧美在线观看| 干 白虎 少妇 嫩 逼 视频| 在线观看成人激情av| 亚洲欧美精品tv久久久久久久久| 亚洲精品成人a8198| 微拍一区二区在线观看| 亚洲欧美另类图片88| 婷婷丁香花综合激情五月天| 啪啪男女日韩网站蜜桃| 公一区二区三区高清99| 99riav国产尤物蜜臀精品| 筱田优在线播放一区二区三区| 国产情侣激情在线对白| 国语对白xxxx乱大交| 啊啊啊操死我轮操视频免费| 日本 久久久 香蕉| 成人性生交大免费三人| 人人妻人人妻人人妻精品| 日本熟妇wxw日本人妻| 99,九九,久久精品| 欧美一区二区蜜桃视频 | 欧洲野外激情性视频| 国产高清免费在线视频| 日本一区二区不卡电影| 久久一区二区三区杨幂| 特黄特色大片观看免费 | 亚洲av性色在线观看黄色| 特黄特色大片观看免费| 老鸭窝最新网址在线| 中国熟妇丰满大乳大屁股| 欧美日韩aaaaa级黄片视频| 免费av在线中文字幕| 成年女人毛片免费在线播放| 视频在线播放一区二区| 少妇的激情夜夜爽爽爽爽爽| 4455vw在线观看| 色婷婷亚洲久久97成人| 中文一区二区三区精品视频| 色淫骚色色色色色色美女| 国产精品欧美日韩久久久免费观看| 美女av网站在线观看| 三级经典三级日本三级欧美| 51日日夜夜精品视频| 91麻豆精品一二三区在线成人| 国产mm视频在线观看| 手机在线免费视频一区二区三区 | 中文在线字幕第一页| 999在线精品视频观看| 亚洲一级免费av黄色打炮片| 日本福利片免费在线播放| 国产c片免费观看| 国产精品精品3d动漫| 免费阿v视频在线播放| 亚洲日本一区二区嫩草| www国产精品久久久| 亚洲自偷自拍另类性受不了| 91人妻人澡人人爽人人精品| 办公室被吃奶好爽在线观看视频| www国产亚洲天堂| 人妻少妇偷人视频一| 伦人伦xxxx国语对白| 99,九九,久久精品| 日本日本熟妇中文在线视频| 欧美激情性4一级完整版| 天天爱天天日天天干天天做| 日本中文字幕人妻一区二区| 国产剧情免费在线观看| 天天干天天操天天日天天射| 嗯~啊~好舒服在线观看| www国产精品久久久| 麻豆一区二区大豆行情| 亚洲欧美日韩不卡人妻中文字幕| 欧美黑人天天干夜夜操| 成人在线视频国产自拍| 日本公与妇电影三级| 久久久老熟女一区二区| 一区二区三区欧美日韩电影| 91人妻精品一区二区三区在线| 国产绿帽人妻精品系列| 国产精品一品二区三区日韩| 起碰97视频在线播放| 日本片免费a在线观看| 国产乱人伦av麻豆网| 国产a v一区二区三区香蕉| 日韩最新视频在线播放| 公一区二区三区高清99| 国产精品啊啊啊不要在线观看| 色就色欧美亚洲αv| 北条麻妃制服丝袜在线播放| 欧美成人免费观看黄片| 一区二区三区四区免费福利视频| 亚洲欧美区二区三区| 99久久夜色精品国产亚洲软件| 都市激情校园春色av| 欧美在线免费污污视频| 古典武侠校园春色亚洲| 青青青青青青青青草青青| 粉嫩av入口一区二区三区| 国产精品自拍亚洲春色| 88888欧美精品久久久| 亚洲美女乱1区2区3区| 国产国语露脸在线视频播放| 亚洲精品超熟女av| 国产伦精品三区精品国偷自产在线| 日韩欧美在线不卡一区二区三区| 久久三级片一区二区毛片| 老司机免费福利视频网| 天天色天天干天天操| 久久亚洲伊人99精品影院| 欧美一区视频不卡高清| 看男破处女人逼黄色片观看| 日韩资源在线中文字幕| 激情 亚洲 精品视频| 欧美午夜不卡一区二区三区| 都市激情校园春色av| 美女被弄高潮喷水91视频9| 在线视频你懂的视频| 午夜福利精品视频在线观看| av中文字幕高清在线| 午夜老司机福利一二三区| 亚洲欧美另类激情综合区动漫| 亚洲精品1234区在线看 | 女人张开双腿让男人捅视频 | 视频你懂得在线观看| 国产精品亚洲综合av| 91久久精一区二区三区大全| 日日天天干夜夜夜操狠狠干| 大黑鸡巴 狂插 欧亚小嫩逼| 国产一线女人天堂av| 精品人妻欧美一区二区| 亚洲 网友 在线 观看| 日韩欧美在线不卡一区二区三区| av网址大全在线播放| 中文字幕最新色片av| 日本福利片免费在线播放| 在线看片1024你懂得| 人妻少妇精品视频专区vr| 亚洲视频综合在线播放| 亚洲久久久久久久久久久久久久 | 欧美黑人天天干夜夜操| 日本很黄很黄的动态视频| 老师让我插进去69AV| 亚洲精品综合视频自拍| 中文字幕av网址大全| 隔壁放荡人妻bd完整版| 五月天开心激情深爱激情| 日本高清插阴视频免费| 挺进老妇的肉91九色| 亚洲三级这里只有精品| 亚洲,自拍,中文,另类| 91久久国产丁香精品中文| 91人妻精品动漫一区二区三区| 男人天堂地址在线播放| 精品99久久久久久www| 日韩精选高清大片在线观看| av男人天堂精品久久| 亚洲精品成人a8198| 美女 激情 欧美 日韩| 3D美女高跟鞋插穴| 天天操夜夜爽夜夜操| 欧美综合一二区在线| 日本 久久久 香蕉| 中文字幕最新色片av| 丰满雪白人妻人爽16av精品| 在线手机免费观看视频| 挺进老妇的肉91九色| av一区二区三区蜜臀| 女抽插流出张开淫水视频| 免费av在线中文字幕| 亚洲国产精彩中文乱码av| 色片免费在线观看喷水| 亚洲中文字幕av在线播放| 午夜精品久久久久久99| 二根鸡巴日一个穴视频| 蜜桃aⅴ噜噜一区二区三区网址| 啪啪男女日韩网站蜜桃| 日韩av卡一卡二卡三| 日本av高清免费观看| 91精选视频在线播放| 日韩一区二区视频在线看| 午夜在线看1000集| 人人妻人人妻人人妻精品| 性色av成年在线观看| 天天操天天色天天天| 青青草精品视频在线免费观看| www久久久久久久99| 精品视频在线视频精品| 港台经典一级成人免费av| 亚洲av永久久久久久久蜜桃| 午夜在线看1000集| 人妻天天操avxx| 精品少妇人妻av免费久久胖妇| 伦人伦xxxx国语对白| 日本av高清免费观看| 在线观看免费a亚洲| 超碰在线97人人草| 老司机免费福利视频网| 97电视剧在线观看免费完整版 | 日本a爱视频二区三区| 96h久久国产激情| 欧美xxxx视频在线| 天天日……天天操……天天喷| 女人被男人阳具抽插的呻吟视频| 日韩精品在线播放视频成年人| 国产成人午夜精品视频| 亚洲永久av午夜福利| 99久久久国产精品美女| 黄色中文字幕在线观看| 国产精品啪啪啪免费网站| 日日夜夜狠狠干干亚洲| 久久中文字幕av观看| 亚洲主要位于五带中的什么带?| 干 白虎 少妇 嫩 逼 视频| 天天色天天干天天操| 在线看片1024你懂得| 91福利精品一区二区| 亚洲精品专区一区二区| 99麻豆精品国产自产在线观看| 欧美在线一区日韩国产| 1777中文字幕字幕在线播放 | 天天干天天日天天超| 成人大片精品在线观看| 女人样男人用大鸡巴操她的逼逼| 大香蕉大香蕉在线播放| 国产白丝美女在线网站| 欧美精品黑人粗大破除| 精精品久久久久久琪琪| 1717精品视频在线观看| 中文字幕不卡av在线播放| 狠狠操 在线视频 轻轻草| 国产伦精品三区精品国偷自产在线 | 另类图片亚洲图区第一页| 正宗欧美在线观看一区二区| 国产女人露脸高潮对白视频| 96人妻一区=区三区| 乱一区二区三区在线播放| 办公室被吃奶好爽在线观看视频| 无套内谢少妇高潮毛片免费看| 欧美激情自拍2020| 日韩破处精品在线观看| 欧美亚洲天堂不卡视频| 91嫩草精品少妇97九九| 国产白丝美女在线网站| 美女诱惑福利在线视频| 亚洲人成亚洲人成在线观看com| 青春草在线视频播放免费观看网站| 高清日本wwwcom| 91精品1080部在线播放| 93乱子伦国产乱子伦| 性感的人妻在线观看| 成人av影视一区在线观看| 亚洲免费观看高清在线| 欧美综合一区二区三区| 在线理论国产高清在线| 欧美精品综合第一页| 在线视频你懂的视频| 99久久免费国产特黄| 欧美福利专区一区二区三区| 亚洲中文有码一区二区| 韩国一区二区三区在线观看| 国产专区视频在线观看免费| 99精产国品一二三产区网站| 青青操视频在线免费| 亚洲自拍偷拍视频二区| 国产综合av一区二区| 久久综合色——久久综合色88| 自拍第一页免费视频| 亚洲自偷自拍另类18p| 在线高清视频你懂得| 亚洲精品**不卡在线播he| 一区二区三区亚洲蜜桃| 亚洲中文字幕av在线播放| 新婚人妻聚会被中出| 成人熟女一区二区三区| 丰满雪白人妻人爽16av精品| 黄片免费观看久久av| 91麻豆精品国产乱码久久久久久| 极品人妻vide0sss人妻| 亚洲精品乱码久久观看网| 国产伊人 av 自拍| 亚洲人体艺术二区三区视频| 亚洲成人一区二区三区av| 长久久久久一区二区高清| 97久久精品熟女超碰| 国产伦精品三区精品国偷自产在线| 亚洲自偷自拍另类性受不了| 成人av影视一区在线观看| 熟女人妻av中文字幕| 五月婷婷综合久久久| 午夜偷拍福利小视频| 天天天天拍天天天天天天| 欧美亚洲国产校园春色 | 国产高清免费在线视频| 一区二区三区四区不卡在线观看 | 久久久久久久国产精品人妻| 夜夜骑加勒比天天操| 久操av在线免费观看| 办公室被吃奶好爽在线观看视频 | 91精品久久久久久婷婷高清 | 要看tv在线观看欧美日韩 | 少妇人妻中文字幕专区视频| 男人把女人捅爽动漫| 午夜精品久久99蜜桃| 久久三级片一区二区毛片| 亚洲图色熟女五月天| 久操视频精品在线观看| 二亚洲女同性同志熟女| 欧美日韩国产综合不卡| 精品视频在线观看久久| 一区二区三区欧美日韩电影| 亚洲免费观看高清在线| 国产精品视频白浆免费网站| 亚洲精品**不卡在线播he| 熟女一区二区三区四区五区视频| 宝贝把腿张开让我添| 嗯~啊~好舒服在线观看| 国产精品久久久久白浆| 五月色婷婷在线视频| 富二代av一区二区| 在线视频无码理论片| 婷婷色综合久久五月天| 青草视频在在线成人av| 亚洲欧美精品tv久久久久久久久 | 99,九九,久久精品| 亚洲欧美动漫卡通 另类| 亚洲国产精品美女久久久av| 国产福利中文字幕导航| 狂野黑人性猛交xxxxxx| 涩涩网站在线观看视频| 人妻少妇精品视频专区vr| 啪啪小视频免费网站| 中文字幕 日韩在线播放| 91大神视频在线观看视频| 国产综合av一区二区| 久久中文字幕av观看| 国产伦精品一区二区黑人| 国自产拍偷拍福利精品免费观看| 变态另类97人妻av| 日韩国产亚洲在线视频| 黑人熟女一区二区三区| 可以免费看的黄页视频| 精品熟女后入一区二区三区| 国产综合av免费观看| 成人性生交大免费三人| 日韩性爱视频无码三级片| 国产成人午夜精品视频| 欧美色一区二区三区在线观看| 成人免费视频国产免费麻豆下| 浪荡人妻共32部分黑人| 亚洲国产精品美女久久久av| 女人样男人用大鸡巴操她的逼逼| 蜜桃一区二区17c| 部长侵犯人妻一区二区三区| 天天日天天色天天搞| 人人咪咪一区二区三区| 91精品人人妻人人澡人人爽人人| 亚洲精品在线观看高清资源| 天堂网作爱视频在线播放| 精品一区二区三区大全| 国产午夜福利精品久久不卡| 国产精品欧美日韩久久久免费观看| 国产又黄又粗又硬又大又猛的视频 | 操白嫩人妻少妇真爽视频| 筱田优在线播放一区二区三区| 成人一级黄色片免费看| 黑人系列哪个最猛番号| 东游记中文字幕版哪里可以看到 | 日韩不伦高清一区二区三区| 91久久国产丁香精品中文| 亚洲精品综合视频自拍| 亚洲欧美国产其他二区| 亚洲 网友 在线 观看| 欧美日韩综合在线免费观看| 亚洲精品国偷自产久色| 欧美精品乱码久久久久久| 欧美大长腿美女抽插网站| 99久久夜色精品国产亚洲软件| 美女草草影院在线观看视频| 在线观看懂色精品大神视频| 成人a毛片久久免费播放| 91久色porny视频在线| 日本v片 中文字幕| 男女啪啪啪网站入口| 操白嫩人妻少妇真爽视频| 国产精品啪啪啪免费网站| 亚洲一区 成人在线| 成人午夜影视在线观看| 免费在线观看视频色播| 2020中文字幕在线播放| 98资源站精品视频在线观看| 93乱子伦国产乱子伦| av男人免费的天堂| 亚洲美女乱1区2区3区| 伦人伦xxxx国语对白| 欧美综合一区二区三区| 操女人下阴黄色一级视频| 女人扒开逼逼让男人操| 欧美福利专区一区二区三区| 三上悠亚和黑人665番号| 青青草手机视频在线观看| 国产综合av免费观看| 天天天天拍天天天天天天| 内射一对幼嫩无毛妹| 91亚洲情色在线播放| 香蕉影视在线观看av最新| 五月婷婷丁香花激情网| 国产又粗又猛又爽又色视频| 五月色婷婷在线视频| 丝袜美腿国产在线观看| 一区二区三区精品视频| 日韩av卡一卡二卡三| 久久精品国产亚洲a| 亚洲成年人三级电影| 67194久久一区二区| 91人妻精品一区二区三区在线| 不卡黄色免费在线观看| 可以在线观看的黄色网页| 青青草原x全国在线观看| 最新日韩成人毛片在线| 成人3d动漫一区二区三区91| 五月天免费在线观看| av在线播放网站资源| 亚洲午夜免费精品久久久| 干风骚美女av在线| 男人天堂新在线电影| 在线观看高清日韩av| 在线手机免费观看视频| 男人插女人逼app| 亚洲天堂一二三四在线播放| 一区二区三区精品视频| 国产午夜在线免费视频| 久久少妇精品一区二区免费| 91精品国产综合久久婷婷香蕉| 亚洲精品久久久久久久久久蜜桃| 欧美在线播放一二区不卡| 天天插天天色天天透| 国产1区2区在线视频| 91久久香蕉国产熟女| 色婷婷亚洲久久97成人| 一区二区三区精品视频| 亚洲中文字幕在线观看黑人| 黄色成人激情福利在线影院| 女人张开双腿让男人捅视频| 国内精品久久久久久久| 久久少妇精品一区二区免费| 天天日天天看天天摸| 免费成视频人免费91| av精选一区二区久久| 古典武侠校园春色亚洲| 午夜剧场欧美一区二区| 欧美一级操逼啊啊啊哦哦哦| 精品熟女后入一区二区三区| 国产日韩欧美精品久久久一区二区| youtube视频字幕中文| 日本系列变态另类一区二区三区| 国产日韩欧美精品久久久一区二区| 美女极品美女福利视频在线| 人妻熟妇丰满不伦一区二区三区| 中文字幕看日韩精品视频| 亚洲另类欧美在线观看| 内射一对幼嫩无毛妹| 亚洲一区二区三区邪恶成人| 午夜网在线观看视频| 青娱乐青青草丁香婷婷| 欧美激情性做爰视频| 伦人伦xxxx国语对白| 伊人青操在线观看视频网站| 亚洲日本欧洲一区二区| 亚洲天堂av插插插| 手机在线免费视频一区二区三区| 大鸡巴爆操美女骚逼| 好吊视频一区二 区三区视频| 色噜噜在线综合亚洲欧美| 2018免费天天干夜夜操| 程嘉美日本全部三级| 亚洲av永久久久久久久蜜桃| 两个人午夜免费看视频| 亚洲精品少妇久久久久久| 国产av人人夜夜澡人人爽下载| 国产精品亚洲综合av| 天天射天天日天天干天天舔| 天天色天天操综合网| www国产精品久久久| 日韩成人综艺在线播放| 国产半推半就精品强推视频| 在线观看小视频国产| 99久在线精品99re8热视频| 精品国产污污免费网站aⅴ17| 成人福利视频一区二区| 999久久久无码精品免费看片| 亚洲中文字幕在线观看黑人| 日韩高清视频在线播放| 国内人人人妻狠狠狠操操| av鲁丝一区鲁丝二区鲁丝四区| 无人码一区二区三区视频| 天天操天天射天天综合网| 操人妻一区二区三区| 亚洲一区 成人在线| 丝袜美腿国产在线观看| 精品成人午夜免费看| 亚洲av一区视频在线观看| 嗯嗯嗯啊啊啊不要好爽视频| 性感丝袜美女诱惑大鸡吧| 精品视频在线观看久久| 男生用大鸡巴捅女生的视频| 欧美av色香蕉一区二区小说| 亚洲另类熟女国产精品老| 国产美女遭高潮免费视频| 欧美精品黑人粗大破除| 青娱乐青青草丁香婷婷| 欧美一级特黄aaaaaa片| 伊人精品在线大香蕉| 手机视频在线观看99精品视频| 白峰美羽在线观看av| 亚洲主要位于五带中的什么带?| av在线操亚洲图片| 午夜福利久久久国产视频| 四川熟女a一区二区三区| 亚洲综合精品推荐69堂| 天天插天天色天天透| 亚洲av好看xx站| www国产亚洲天堂| 污污污视频在线观看91| 成人av影视一区在线观看| 92免费视频人妻网| xxxx在线免费观看视频| 国产绿帽人妻精品系列| 美女极品美女福利视频在线| 亚洲图片,自拍偷拍| 日本中文字幕人妻一区二区 | 日韩性爱视频无码三级片| 97人妻人人做人碰人人爽一| 亚洲精品1234区在线看| 性感丝袜美女诱惑大鸡吧| 蜜臀 av一区二区| 欧美142p极品服务| 天天色天天情天天透| 欧美精品综合第一页| 超碰在线97人人草| 在线手机免费观看视频| 久久精品在线观看免费视频| 18人妻人碰人人做人人爽| 亚洲人人妻一区二区三区| 中文字幕精品av在线观看| 香蕉影视在线观看av最新| 日韩国产亚洲在线视频| 色综合久久加勒比高清剧情| 人妻不卡一区二区三区| 国产美女主播丝袜高潮白浆| 色片网站在线看亚洲精品| 白峰美羽在线观看av| ai给视频自动加字幕| 91精品人妻中文字幕| 久久91精品国产91久久分享| 婷婷av一区二区三区7| 欧美一级特黄aaaaaa片| 极品国模sm镣铐调教| 最新日韩成人毛片在线| av蜜桃网在线观看| 一区二区三区国产精选在线播放| 亚洲图片,自拍偷拍| 亚洲欧美另类图片88| 宝贝把腿张开让我添| 日韩av免费福利在线观看| 日本一区二区不卡电影| 午夜福利免费福利视频| 亚洲三级这里只有精品| 国产伦精品三区精品国偷自产在线 | 亚洲性趣老熟妇高清| 91久久国产丁香精品中文| 五月婷婷综合大香蕉五月天| 国内精品视频久久久久| 91jk麻豆美女丝袜诱惑| 欧美成人a v在线| 无套内谢少妇高潮毛片免费看| 日韩三级中文字幕熟女| 人人玩精品人妻少妇性性色| 成人18禁视频网站在线看| 在线手机免费观看视频| 亚洲另类熟女国产精品老| 婷婷色综合久久五月天| 亚洲图片,自拍偷拍网| 人妻少妇偷人视频一| 久久99精品国产99久久6尤| 偷窥中国丰满多毛老熟女| aaa222男人天堂| 瑟瑟的网站在线观看| 大香蕉97精品一区二区三区| 好吊视频一区二 区三区视频| 古典武侠校园春色亚洲| 精品人妻欧美一区二区| 狠狠躁日日躁夜夜躁2| 狠狠躁日日躁夜夜躁视频| 欧美精品第5页在线观看视频| 精品熟女后入一区二区三区| 亚洲图色熟女五月天| 97精品在线观看视频| 亚洲欧美另类激情综合区动漫| 天天操天天日天天啪| 中文字幕永久在线一区二区| 亚洲欧美一区二区精华液| 亚洲欧美动漫卡通 另类| 亚洲天堂一二三四在线播放| 玖玖玖精品视频在线观看| 免费在线观看国产成人大片| 亚洲精品 国产成人| 国产三级伦理在线观看| 偷拍亚洲另类图片视频 | 亚洲另类欧美在线观看| 亚洲美女乱1区2区3区| 日韩av中文字幕网址| 91人妻人人做人人爽九色全集| 日日夜夜狠狠干干亚洲| 91精品在线播放hd| 亚洲日本一区二区嫩草| 精品视频在线视频精品| 亚洲久久久久久久久久久久久久 | 国产传媒网址在线观看| 搡四十路e五十路熟女av| 在线高清视频你懂得| 免费高清视频在线观看不卡男男| 国产盗摄女子私密保健视频| 欧美图色 亚洲图色| 91精品在线播放hd| 国产精品一品二区三区日韩| 超碰在线97人人草| 欧洲野外激情性视频| 93乱子伦国产乱子伦| 国产一区精品在线观看免费| 精品视频在线视频精品| 日韩av中文字幕网址| 在线观看高清日韩av| 三级三级三级日本99| 色片网站在线看亚洲精品| 青草视频在在线成人av| 极品人妻vide0sss人妻| 欧美一区,二区三区高清视频| 大鸡巴爆操美女骚逼| 91国产精品久久久久麻豆| 偷窥中国丰满多毛老熟女| 69 久久99精品久久久| 午夜福利久久久国产视频| 亚洲欧美一区二区精华液 | 国自产拍偷拍福利精品免费观看| 久久久国产视频91| 日韩成人在线电影,| 挺进老妇的肉91九色| 日韩加勒比东京热二区| 亚洲天堂都市激情av| 日韩av卡一卡二卡三| 国产亚洲精品天堂在线观看| 美女极品美女福利视频在线| 亚洲国产精品av久久久| 中文字幕久久精品亚洲乱码| 亚洲av男人的天堂久久久| 天天射天天日天天干天天舔| 欧美大黑硬鸡巴操骚肥湿逼 | 天天透天天插天天通| 国产视频在线精品视频| 国产剧情免费在线观看| 亚洲国产欧美一区二区三区久久| 一区二区三区在线 日韩| 亚洲精品国偷自产久色| 欧美图色 亚洲图色| 久久久久久久久久久蜜桃| 天天日天天色天天摸| 欧美,日本中文高清视频| 福利一区二区在线视频| 日韩毛片综合在线观看网站| 成人性生交大免费三人| 免费观看视频一区,二区,三区| 东北老熟女疯狂作爱视频| 不卡精品国产_亚洲人成在线| 人人妻人人妻人人妻人人妻人人人| 免费成视频人免费91| 操日本裸体美女骚逼| 亚洲激情视频免费在线 | julia 人妻中文字幕| 最新人妻熟女中文字幕| 亚洲日本欧洲一区二区| 偷拍自拍 中文字幕| 国产情侣激情在线对白| youtube视频字幕中文| 91人妻精品动漫一区二区三区| av男人免费的天堂| 男人天堂新在线电影| 国产欧美日韩经典一区| 俄罗斯第一次处破女| 成人福利视频一区二区| 在线手机免费观看视频| 999在线精品视频观看| 国产av一区二区三区天堂| 999久久久精品精品| 三级黄色亚洲成人av| 亚洲一区二区综合网| 四川操bb操bb操b| 亚洲天堂精品区三区二区一区| 国产喷水在线免费观看| 亚洲性趣老熟妇高清| 四川操bb操bb操b| 中文字幕 日韩在线播放| 91人妻精品动漫一区二区三区| 在线播放国产免费av| 日韩av卡一卡二卡三| 国产视频在线精品视频| 亚洲精品成人原创视频| av男人天堂精品久久| 亚洲av网站在线免费观看| 亚洲国产成人在线观看网址| 99久久精品国产欧美一区二区| 童话村热久久精品精| 亚洲av永久久久久久久蜜桃| 91在线免费观看成人| 国产精品爽黄69天堂ai蜜乳| 3D美女高跟鞋插穴| 在线视频你懂的视频| 欧美成人a v在线| 操人妻一区二区三区| 午夜性色福利视频自拍偷拍| 日韩不伦高清一区二区三区| 日日夜夜夜操天天干| 国产伦精品一区二区黑人| 欧美亚洲国产校园春色 | 99久久精品国产欧美一区二区| 91大神视频在线观看视频| 国产1区2区在线视频| 天天大香蕉一区二区三区| 亚洲久久久久久久久久久久久久| 亚洲av午夜精品一老妈| 天天干天天操天天日天天射| 男人插女人逼app| 少妇的激情夜夜爽爽爽爽爽| 96h久久国产激情| 人妻熟女免费一区二区萩原| 久久综合色——久久综合色88| 98资源站精品视频在线观看| 日日躁夜夜躁狠狠久久av| 日韩欧美在线不卡一区二区三区| 男人的天堂av最新| 北条麻妃制服丝袜在线播放| 精品岛国产熟女人妻欲求不满| 十分钟在线观看视频| 亚洲真人性在线观看| 中文字幕第一区久久| 成人福利电影免费网址| 黄片免费观看久久av| 婷婷综合尤物精品国产| 蜜桃av在线网址观看| 五月天中文字幕剧情在线| 久久久激情视频网站| 色片网站在线看亚洲精品| 中文字幕日本一本二本三区| 免费直接观看的麻豆黄色| 超碰人妻中文字幕在线| 99久久99久久免费精品蜜臀| 少妇内射的视频一区二区| 部长侵犯人妻一区二区三区| 亚洲 网友 在线 观看| 日本成人午夜电影视频| 五月婷婷综合大香蕉五月天| 97久久精品熟女超碰| 91表用白丝脚帮我脚交| 超碰chaopeng 国产| 人妻久久免费视频中文字幕| 大肉大捧一进一出免费视频网址| 日本免费播放一区二区三区| 丁香激情五月天综合网| 少妇高潮尖叫久久久久| 亚洲图片,自拍偷拍网| 中文字幕看日韩精品视频| 欧美图色 亚洲图色| 美女的逼让男人桶的视频| 亚洲人成亚洲人成在线观看com| 91老熟女连续高潮对白| 97超碰在线cao| av精选一区二区久久| 少妇美女大极品内射| 亚洲天堂一二三四在线播放| 人妻中文字幕不卡av观看| 欧美在线免费污污视频| 98视频在线免费观看| 91久久国产丁香精品中文| 手机能看的黄色av| 日日夜夜夜操天天干| 勾引小哥鸡巴操逼视频下载| 日韩加勒比东京热二区| 五月婷婷综合大香蕉五月天| 欧美熟妇亚洲中文不卡少妇| 无套内谢少妇高潮毛片免费看| 超碰在线97人人草| 亚洲精品免费一二三区| 精品人人妻人人澡人人爽| 成人黄色大片免费网站| av鲁丝一区鲁丝二区鲁丝四区| 好的一级毛片免费毛片直播| 中文字幕精品av在线观看| 午夜国产福利视频一区二区| 午夜精选视频在线观看| 手机视频在线观看99精品视频| 国产精品亚洲综合av| 日韩加勒比东京热二区| 日本女护士久久精品| 国产又黄又粗又硬又大又猛的视频 | 欧美日韩aaaaa级黄片视频| 999久久久无码精品免费看片| 亚洲情品中文字幕人妻久久久边| 内射一对幼嫩无毛妹| 老师让我插进去69AV| 国产精品黄色自拍视频| 久久性视频不卡网站| 成人一级黄色片免费看| 999久久久无码精品免费看片| 91九色porny国产探花| 港台经典一级成人免费av | 亚洲欧美另类专区第一页| 日韩美女精品一在线观看| 青青草原x全国在线观看|