小程序根据登录状态,判断跳转首页还是登录页_厦门在乎科技的博客-CSDN博客_小程序根据登录状态,判断跳转首页还是登录页

mikel阅读(491)

来源: 小程序根据登录状态,判断跳转首页还是登录页_厦门在乎科技的博客-CSDN博客_小程序根据登录状态,判断跳转首页还是登录页

准备是在小程序初始化进行一下登录状态判断,每次登陆以后会在storage里存一个user,根据这个值判断,没登陆过小程序启动进登录页面,登陆过直接跳转首页:

App({
onLaunch: function() {
//初始化加载,先判断用户登录状态
if (wx.getStorageSync(‘user’)) {
wx.switchTab({
url: ‘pages/home/home’
})
} else {
wx.reLaunch({
url: ‘pages/login/login’
})
}

},
globalData: {

}
})
在aap.js里面初始化的时候进行判断,真机情况下没有登录状态时,还是会先加载首页面(一闪而过),之后跳转到login登录页面,登录成功后,返回首页。

小程序登录获取用户信息:

login.wxml

<button wx:if=”{{canIUse}}” open-type=”getUserInfo” bindgetuserinfo=”bindGetUserInfo”>授权登录</button>

<view wx:else>请升级微信版本</view>
login.js

Page({
data: {
//判断小程序的API,回调,参数,组件等是否在当前版本可用。
canIUse: wx.canIUse(‘button.open-type.getUserInfo’)
},
onLoad: function() {
// 查看是否授权
wx.getSetting({
success: function(res){
if (res.authSetting[‘scope.userInfo’]) {
wx.getUserInfo({
success: function(res) {
console.log(res.userInfo)
//用户已经授权过
}
})
}
}
})
},
bindGetUserInfo: function(e) {
console.log(e.detail.userInfo)
if (e.detail.userInfo){
//用户按了允许授权按钮
} else {
//用户按了拒绝按钮
}
}
})
wx.canIUse(string schema)

判断小程序的API,回调,参数,组件等是否在当前版本可用。
————————————————
版权声明:本文为CSDN博主「厦门在乎科技」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41996102/article/details/118361725

微信小程序WebSocket接口以及在小程序中的使用。_一条大猫的博客-CSDN博客_小程序websocket

mikel阅读(373)

来源: 微信小程序WebSocket接口以及在小程序中的使用。_一条大猫的博客-CSDN博客_小程序websocket

关于微信小程序WebSocket的使用
一、连接wx.connectSocket
二、wx.onSocketOpen和wx.onSocketError
三、wx.onSocketMessage
四、wx.sendSocketMessage
五、wx.closeSocket
六、wx.onSocketClose
一、连接wx.connectSocket
示例:

wx.connectSocket({
url: ‘xxx.com’,
data:{
x: ”,
y: ”
},
header:{
‘content-type’: ‘application/json’
},
method:”GET”
})

这里要注意url中的接口不是http://.xxx或者https://.xxx开头的,而是以ws://xxx.com或者wss://.xxx开头的,要不然就会连接失败

二、wx.onSocketOpen和wx.onSocketError
他们是监听监听wx.connectSocket的连接成功与否的

代码如下(示例):

//连接成功
wx.onSocketOpen((res) => {
console.log(‘WebSocket 成功连接’, res)
})
//连接失败
wx.onSocketError((err) => {
console.log(‘websocket连接失败’, err);
})

三、wx.onSocketMessage
这里是接收服务器的消息的(也就是聊天时对面发来的消息)
代码如下(示例):

//连接WebSocket
wx.connectSocket({
url: ‘xxx.com’,
data:{
x: ”,
y: ”
},
header:{
‘content-type’: ‘application/json’
},
method:”GET”
})
wx.onSocketOpen((res) => {
console.log(‘WebSocket 成功连接’, res)
wx.onSocketMessage(function(res) {
console.log(‘收到服务器内容:’, res)
//不需要考虑如何触发,当服务器发送消息时自动接收
})
})

四、wx.sendSocketMessage
//这是发送消息的事件
sendSocketMessage() {
let msg={
msg:this.data.inputVal,//这是聊天的内容
toUser:this.data.user1.id//这是聊天的id
}
wx.sendSocketMessage({
data: JSON.stringify(msg),//这里根据后台的格式发送数据,好像这个需要转换成字符串。
success:(res)=>{
console.log(“消息发送成功”, res)
},
fail(res) {
console.log(“消息发送失败”, res)
}
})
},

五、wx.closeSocket
关闭WebSocket连接。

六、wx.onSocketClose
监听WebSocket关闭。

wx.connectSocket({
url: ‘test.php’
})

//注意这里有时序问题,
//如果 wx.connectSocket 还没回调 wx.onSocketOpen,而先调用 wx.closeSocket,那么就做不到关闭 WebSocket 的目的。
//必须在 WebSocket 打开期间调用 wx.closeSocket 才能关闭。
wx.onSocketOpen(function() {
wx.closeSocket()
})

wx.onSocketClose(function(res) {
console.log(‘WebSocket 已关闭!’)
})

})
————————————————
版权声明:本文为CSDN博主「一条大猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_52212982/article/details/122657526

微信小程序页面引入公用头部底部 - zshNo1 - 博客园

mikel阅读(408)

来源: 微信小程序页面引入公用头部底部 – zshNo1 – 博客园

最近比较浮躁各种事情各种烦恼,现在开始静下心来写博客。学技术就不能浮躁时时刻刻要记在心里,激励自己希望也可以激励大家。最近一段时间在开发小程序,没有系统的学习过拿起来就做的那种写的不好各位多多指教。

第一步:新建一个目录

在pages目录下面新建一个templates目录(小窍门:在app.json 文件pages里面写上”pages/templates/foot” 自动为我们生成),这个目录我们用来存放公用的模板。下面是我们创建完的目录:

第二步:定义模板

  在我们新建的foot.wxml文件下编写代码如下:


<!–pages/templates/foot.wxml–>
<template name="foot">
  <text>我是底部</text>
</template>

name 是template的属性,作为模板的名字。

第三步:引用模板

现在我们在pages/index/index.wxml里面引用这个模板。

<import src="../templates/foot"/>
<template is="foot"></template>
src="../templates/foot" 模板的路径

is="foot"模板的名字
现在就能用了

小程序初始化加载,根据登录状态判断跳转首页还是登录页 - JoeYoung - 博客园

mikel阅读(438)

来源: 小程序初始化加载,根据登录状态判断跳转首页还是登录页 – JoeYoung – 博客园

准备是在小程序初始化进行一下登录状态判断,每次登陆以后会在storage里存一个user,根据这个值判断,没登陆过小程序启动进登录页面,登陆过直接跳转首页:

复制代码
App({
    onLaunch: function() {
        //初始化加载,先判断用户登录状态
        if (wx.getStorageSync('user')) {
            wx.switchTab({
                url: 'pages/home/home'
            })
        } else {
            wx.reLaunch({
                url: 'pages/login/login'
            })
        }
  
    },
    globalData: {
  
    }
})
复制代码

在aap.js里面初始化的时候进行判断,真机情况下没有登录状态时,还是会先加载首页面(一闪而过),之后跳转到login登录页面,登录成功后,返回首页。

小程序登录获取用户信息:

login.wxml

<button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授权登录</button>  

<view wx:else>请升级微信版本</view>
login.js
复制代码
Page({
  data: {
    //判断小程序的API,回调,参数,组件等是否在当前版本可用。
    canIUse: wx.canIUse('button.open-type.getUserInfo')
  },
  onLoad: function() {
    // 查看是否授权
    wx.getSetting({
      success: function(res){
        if (res.authSetting['scope.userInfo']) {
          wx.getUserInfo({
            success: function(res) {
              console.log(res.userInfo)
              //用户已经授权过
            }
          })
        }
      }
    })
  },
  bindGetUserInfo: function(e) {
    console.log(e.detail.userInfo)
    if (e.detail.userInfo){
      //用户按了允许授权按钮
    } else {
      //用户按了拒绝按钮
    }
  }
})
复制代码

wx.canIUse(string schema)

判断小程序的API,回调,参数,组件等是否在当前版本可用。

理解session及微信小程序使用session_程序员资料站的博客-CSDN博客

mikel阅读(391)

来源: 理解session及微信小程序使用session_程序员资料站的博客-CSDN博客

session介绍
由于Http是无状态的协议,所以服务端需要记录用户的状态时,就需要某种机制来识别具体的用户,实现这个机制的方式就是session。

典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。

那么服务器端是如何识别特定的客户的?

每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。

下次请求时会带上sessionId:

 

实现Session跟踪需要用到Cookie,如果客户端的浏览器禁用了 Cookie 怎么办?

一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

实现方式
服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。

在程序中第一次调用request.getSession()方法时就会创建一个新的Session,可以用isNew()方法来判断Session是不是新创建的。

session对象默认30分钟没有使用,则服务器会自动销毁session。

当需要在程序中手动设置Session失效时,可以手工调用session.invalidate方法,摧毁session。

HttpSession session = request.getSession();
//手工调用session.invalidate方法,摧毁session
session.invalidate();
1
2
3
微信小程序使用session时注意的问题
微信小程序不能保存Cookie,导致每次wx.request到服务端都会创建一个新的会话(传过去的sessionid会变化),小程序端就不能保持登录状态了。

一个比较简单的办法就是把服务端response的Set-Cookie中的值保存到Storage中。

登录成功后,添加Cookie:

wx.setStorageSync(“cookieKey”, res.header[“Set-Cookie”]);
1
然后调用接口时,在header中加入:

‘Cookie’: wx.getStorageSync(‘cookieKey’)
1
接口调用由之前的:

wx.request({
url: ‘test.php’,
data: {
x: ”,
y: ”
},
header: {
‘content-type’: ‘application/json’
},
success (res) {
console.log(res.data)
}
})

1
2
3
4
5
6
7
8
9
10
11
12
13
14
变为:

wx.request({
url: ‘test.php’,
data: {
x: ”,
y: ”
},
header: {
‘content-type’: ‘application/json’ ,
‘Cookie’: wx.getStorageSync(‘cookieKey’)
},
success (res) {
console.log(res.data)
}
})

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
欢迎访问我的个人博客:易水寒的博客
————————————————
版权声明:本文为CSDN博主「程序员资料站」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yongbutingxide/article/details/106196661

【微信小程序】后端无法保持session的原因及解决办法_minjor的博客-CSDN博客_小程序使用不了session

mikel阅读(346)

来源: 【微信小程序】后端无法保持session的原因及解决办法_minjor的博客-CSDN博客_小程序使用不了session

之前未接触过微信小程序项目,在使用JQuery库的ajax中很正常,服务器也能保持会话状态。在使用wx.request中发现会话一直不能保持,一开始以为是服务器php.ini配置错误,

PHP在代码中加入session_start()或者开启session.auto_start()
确认session.save_path配置正确且有读写权限
的情况下仍无效果。以上方法确实可以解决大多数情况下的页面刷新session无法保持问题。
但是在设置之后都没有效果。

最后发现,原来是JQuery的ajax(应该是浏览器)会自动维护cookie,而wx.request不会。
这涉及到session与cookie的关系及保存机制的问题。

首先,cookie是保存在客户端的信息,而session是保存在服务器的信息。

那服务器如何识别单独用户的session,在一次连接下,如何判别该用户是属于哪一个session。
机制是,服务器生成一个sessionid辨别用户,并在相应中的cookie带上该sessionid值。在用户下一次请求时,请求头中cookie理应也带上该sessionid,以便服务器辨别用户会话。其中辨别机制和session存储机制涉及到序列和反序列化,在session.save_path中,为每一个session单独创建一个文件,文件名为sessionid,内容则是此次会话保存的session。

而wx.request并不会在请求中带上cookie,所以导致每次请求都被服务器分配一个新的sessionid,造成会话不能保持的后果。

解决办法
解决办法是
应在wx.request中带上该sessionid,或者重新封装wx.request。

2019/9/27更新:
自己维护一个header,在wx.request中保存和发送Cookie。
首先在app.js中存储一个全局变量,存放header。

globalData: {
header: {
“content-type”: “application/x-www-form-urlencoded”,
‘Cookie’: ”
}
}

然后在每一次wx.request中的请求参数中带上该header。
在每一次响应中检测并保存Cookie到header。

wx.request({
url: ‘http://localhost/loginDemo/server/loginTest.php’,
//带上请求头
header: getApp().globalData.header,
method: ‘POST’,
data: {
action: “login”,
user: that.data.userInfo.nickName
},
success: function(res){
console.log(res)
//dosometing…
//判断后端响应中有没有set-cookie值,有即是后端需要设置cookie,在此例中后端设置session id
if (res.header[“Set-Cookie”] != null) {
//设置cookie
getApp().globalData.header[“Cookie”] += res.header[“Set-Cookie”]
}
},
fail: function (res) {
console.log(res)
wx.showToast({
title: ‘连接服务器失败’,
icon: “none”
})
}
})

测试
第一次请求,本地(header)没有Cookie存储的PHPSESSIONID。

第一次请求响应,服务器返回Set-Cookie,带上phpsessionID。
自己维护,存储到header中。

第二次请求带上header,有sessionID。

第二次请求响应服务器检测到session,恢复会话,不创建新的会话。

以上方法基本能解决微信小程序Cookie问题。
————————————————
版权声明:本文为CSDN博主「minjor」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36320180/article/details/88785218

Postman如何进行https请求测试 - 简书

mikel阅读(387)

来源: Postman如何进行https请求测试 – 简书

今天项目需要调用第三发提供的https接口,接口好像是单方认证,也没给我们提供客户端的公钥等一系列问题,但是在Postman测试一直报错

Could not get any response

There was an error connecting to .

Why this might have happened:

The server couldn’t send a response:

Ensure that the backend is working properly

Self-signed SSL certificates are being blocked:

Fix this by turning off ‘SSL certificate verification’ in Settings > General

Proxy configured incorrectly

Ensure that proxy is configured correctly in Settings > Proxy

Request timeout:

Change request timeout in Settings > General

如图:

最终找到解决方案:

setting->general

Certificates 增加https地址信息

即可顺利调用成功

2人点赞

作者:乐子侃生活
链接:https://www.jianshu.com/p/614a3ab57c36
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

【PostMan】测试Post请求_CallMeJacky的博客-CSDN博客_postman测试post

mikel阅读(479)

来源: 【PostMan】测试Post请求_CallMeJacky的博客-CSDN博客_postman测试post

在我们调试代码时,经常需要提交表单到后台,有些时候为了调试后台的内容,需要重复输入表单的内容,此时,我们可以借助PostMan帮助我们每次都能够自动提交表单。

1. 复制表单内容
F12打开调试面板,填写表单,并提交。在Network中找到出现问题的表单提交请求,如下图所示。

点击该请求,会出现下图,找到Form Data,并复制

id:
name: 数据结构与算法分析:Java语言描述(原书第3版)
catalogID: 28
unit: item
introduce: 数据结构与算法分析:Java语言描述(原书第3版)
picture: (binary)
price: 112
nowPrice: 39.9
stock: 50
sellcount: 0
isnew: n
sale: n
score: 0
title: java编程
description: 本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具,讨论数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。 随着计算机速度的不断增加和功能的日益强大,人们对有效编程和算法分析的要求也不断增长。本书将算法分析与*有效率的Java程序的开发有机结合起来,深入分析每种算法,并细致讲解精心构造程序的方法,内容全面,缜密严格。 第3版的主要更新如下: 第4章包含AVL树删除算法的实现。 第5章进行了全面修订和扩充,现在包含两种较新的算法——布谷鸟散列和跳房子散列。 第7章包含基数排序的相关内容,并给出了下界证明。 第12章增加了后缀树和后缀数组的相关材料,包括Karkkainen和Sanders的线性时间后缀数组构造算法。
keywords: java;数据结构
productHTML:
images:
specList[0].id:
specList[0].specColor:
specList[0].specSize:
specList[0].specStock:
specList[0].specPrice:
specList[0].specStatus: n
specList[1].id:
specList[1].specColor:
specList[1].specSize:
specList[1].specStock:
specList[1].specPrice:
specList[1].specStatus: n
giftID:

2. 携带认证信息
有时,需要携带用户信息,Cookie中会记录用户的信息,用于认证。找到该请求的Request Headers,并找到Cookie属性并复制:

Cookie: JSESSIONID=DC207F202570698212BB77A87EFF596A; UM_distinctid=16dab386da8f8-00e1ac073a46e9-675c7c29-144000-16dab386da989; Idea-f60c4641=ac150ca4-ce16-45bd-9b6f-ff496322501a; CNZZDATA1000234875=1203544764-1570535622-%7C1571114002
1

打开Postman,找到Header,并编辑:

3. 利用Postman测试
打开Postman,设置请求类型为Post,找到body,选择form-data,点击edit链接后,将之前复制的表单信息粘贴进去。

另外,注意到picture: (binary),是因为表单中picture字段用于上传图片,所以,这里需要将picture字段属性类别设置为file:

接着,选择文件即可。
————————————————
版权声明:本文为CSDN博主「CallMeJacky」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zyxhangiian123456789/article/details/102565303

Postman请求https接口_貂蝉还在骑马赶来的路上的博客-CSDN博客_postman https

mikel阅读(384)

来源: (5条消息) Postman请求https接口_貂蝉还在骑马赶来的路上的博客-CSDN博客_postman https

1.进入postman的设置界面;

2.关闭general下面的ssl校验;

3.切到Certificates页签,并添加客户端校验;

4.到达如下界面:

到达上面界面之后,其中CRT file、KEY file、Passphrase需要我们填写,其中CRT file为客户端密钥库的公钥,KEY file为客户端密钥库的私钥,下面我会仔细讲生成方法;Passphrase为密钥库的密码,这是我们之前生成客户端证书时自己设置的密码,经测试不填写也不影响。

生成客户端公钥和私钥的方法:
①找到之前我们使用keytool生成证书的文件保存位置,大家可以看到我这里已经存在两个pem文件了,这是因为我之前已经生成过一次了,截图的时候没有删除,哈哈,大家不要在意;(其中关于生成公钥和私钥的p2文件是怎么来的,与我上一篇文章有关,我会把链接放在本文的最下边)

②生成公钥的命令:

Openssl pkcs12 -in D:\home\mykey.p12 -clcerts -out D:\home\public_key.pem
1

③这里需要输入我们之前设置的密码,输入之后,回车即可生成公钥;(其中有人好奇密码是什么时候设置的,其实就是之前tomcat配置https时,为浏览器生成证书时大家自己设置的密码,与我上一篇文章有关,我会把链接放在本文的最下边)

④生成私钥的命令:

openssl pkcs12 -in D:\home\mykey.p12 -nodes -out D:\home\private_key.pem
1

⑤生成的私钥如下:

至此公钥和私钥都生成完毕,可以添加到postman了。

5.添加生成的公钥和私钥

输入完成之后,点击添加。
Postman这时便能正常请求https接口了。

Tomcat配置https步骤链接
https://blog.csdn.net/liuxingdeyun/article/details/94346798
————————————————
版权声明:本文为CSDN博主「貂蝉还在骑马赶来的路上」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liuxingdeyun/article/details/94709113

解决 VScode (因为在此系统上禁止运行脚本)报错 - 腾讯云开发者社区-腾讯云

mikel阅读(403)

来源: 解决 VScode (因为在此系统上禁止运行脚本)报错 – 腾讯云开发者社区-腾讯云

很多小伙伴在使用 VScode 自带程序终端的时候会报出”系统禁止脚本运行的错误”,

准备的原因,是因为 PowerShell 执行策略的问题。

解决方法:

  1. 管理员身份运行 window.powershell
  2. 执行:get-ExecutionPolicy,显示Restricted,表示状态是禁止的;
  3. 执行:set-ExecutionPolicy
  4. 会提示输入参数:RemoteSigned
  5. 会提示进行 选择:

2. 输入:Y

之后就不会有问题了。

科普window.powershell 知识点:

Windows给powershell设定了一个叫“执行策略”的东西。

为什么要弄这么一个执行策略呢,因为powershell能做的事情太多了,为了避免一些恶意脚本直接运行,一般家用的windows系统默认将执行策略设置成了“Restricted”,即受限制的。

我们可以运行命令来查看自己电脑上的执行策略被设置成了什么:

cmd Get-ExecutionPolicy -LIST

显示:

Scope ExecutionPolicy     —– —————     MachinePolicy Undefined     UserPolicy Undefined     Process Undefined     CurrentUser Undefined     LocalMachine Unrestricted

或者运行Get-ExecutionPolicy,输出Restricted

说明电脑是受限制的,不能运行任何的脚本。

所有的执行策略如下所示(参考About Execution Policies):

AllSigned. 要求所有脚本和配置文件均需受信任的发布者签名,包括在本地计算机上编写的脚本。(安全但是本地编写的脚本也要签名,麻烦) Bypass. 不会阻止你运行任何脚本,也没有提示和警告。(不安全) Default. 默认的执行策略,普通桌面Windows默认Restricted,服务器windows默认RemoteSigned。 RemoteSigned. 要求从互联网上下载的所有脚本和配置文件均需要受信任的发布者签名,本地脚本则不需要签名。是Windows服务器的默认执行策略。(较为安全) Restricted. 无法加载配置文件或运行脚本。桌面Windows的默认执行策略。(安全,但无法运行脚本) Undefined. No execution policy is set for the scope. Removes an assigned execution policy from a scope that is not set by a Group Policy. If the execution policy in all scopes is Undefined, the effective execution policy is Restricted.(这里的Undefined不知道是什么东西,先不管它) Unrestricted. 从PowerShell 6.0开始,这是非Windows系统的默认执行策略,并且不能更改。 能够加载任何配置文件和运行任何脚本。如果运行从网上下载的未签名脚本,则会在运行之前提示您获得许可。(不安全) 经过权衡安全和便捷,决定设置成RemoteSigned策略,运行一下命令

cmd执行Set-ExecutionPolicy

输入参数:RemoteSigned

显示:
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): y