以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  用授权后跳转链接,第一进入网页cookies未生成  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=121838)

--  作者:fubblyc
--  发布时间:2018/7/13 17:04:00
--  用授权后跳转链接,第一进入网页cookies未生成
甜老师,
直接跳转链接:http://yijiansoft.net/yhqshouye.htm
获取的cookies,用来做验证码没问题
授权跳转,cookies 第一次没有获取到,要再一次刷新,才有cookies
授权跳转链接:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8921022fc595bc93&redirect_uri=http%3a%2f%2fwww.yijiansoft.net&response_type=code&scope=snsapi_userinfo&state=antashandong#wechat_redirect

授权跳转代码:
            Dim AppId As String= dr("AppId")
            Dim Secret As String = dr("AppSecret")
            Dim zhangtao As String = dr("账套")
            Dim ul As String  = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code"
            ul = CExp(ul,appid,secret,e.GetValues("code"))
            Dim hc As new HttpClient(ul)
            Dim jo As JObject = JObject.Parse(hc.GetData)
            If jo("openid") IsNot Nothing Then \'如果获取openid成功(成功的话,还会同时返回一个accesstiken,用于获取用户详情)
                OpenID = jo("openid")
                Dim drwx As DataRow = DataTables("WXUsers").sqlFind("openid =\'" & Openid & "\'")
                If drwx IsNot Nothing Then
                Else
                    ul = "https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN "
                    \'根据openid和accesstoken获取用户详情,注意这里这个accesstoken不是普通accesston,只能用于网页授权
                    hc = New HttpClient(CExp(ul, jo("access_token"), OpenId))
                    jo = jo.Parse(hc.GetData)
                    If jo("openid") IsNot Nothing Then
                        drwx = DataTables("WXUsers").sqlAddNew()
                        Dim nms() As String = {"openid","nickname","sex","city","country","province","headimgurl"} \'""
                        For Each nm As String In nms
                            drwx(nm) = jo(nm)
                        Next
                        drwx("账套") = zhangtao
                        drwx("addtime") = Date.now
                        drwx.Save
                    Else
                        e.WriteString(jo.ToString) \'在用户浏览器显示错误信息
                        Return ""
                    End If
                End If
                e.AppendCookie("openid",OpenID)
                e.AppendCookie("zhangtaowxzc",dr("账套"))                
sb.Append("<meta http-equiv=\'refresh\' c o n t e n t = \'0; u r l =/yhqshouye.htm\'>")
\'sb.Append("<meta http-equiv=\'refresh\' c >")
                e.WriteString(sb.ToString)
            Else
                e.WriteString(jo.ToString) \'在用户浏览器显示错误信息
                Return ""
            End If
        End If
[此贴子已经被作者于2018/7/13 17:07:10编辑过]

--  作者:fubblyc
--  发布时间:2018/7/13 17:05:00
--  
甜老师,你可以用手机去访问一下链接,我有做弹出。
会发现第一次进入
授权跳转的链接,不存在  yzm 的cookies 
而直接进入的就会有存在。
[此贴子已经被作者于2018/7/13 17:15:40编辑过]

--  作者:fubblyc
--  发布时间:2018/7/13 17:26:00
--  
甜老师,我看了,
用授权跳转的:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8921022fc595bc93&redirect_uri=http%3a%2f%2fwww.yijiansoft.net&response_type=code&scope=snsapi_userinfo&state=antashandong#wechat_redirect

cookies不会马上生效
而直接跳转的
http://yijiansoft.net/yhqshouye.htm
就可以。
授权跳转的,也是到http://yijiansoft.net/yhqshouye.htm这个页面

那要怎么处理呢。。。
[此贴子已经被作者于2018/7/13 17:31:54编辑过]

--  作者:fubblyc
--  发布时间:2018/7/13 18:27:00
--  
注册的代码:
.AddVcodeButton("vyz","获取验证码",2).Attribute=";" \'增加获取验证码按钮,2表示显示在右边

function getNum() 代码:
var result = sendAjaxText(document.getElementById("mobi").value, "faduanxin.htm","",false); 
alert(result)

faduanxin.htm代码:
发送成功后:
    e.AppendCookie("yzm", yzm)
    e.WriteString("发送完毕!如果60秒后没有收到短信请重新发送!")

照理说,e.AppendCookie("yzm", yzm)是在faduanxin.htm这个页面执行,在注册页面应该有增加cookies才对。
就像直接访问http://yijiansoft.net/yhqshouye.htm一样。
那为什么授权跳转的,就不会生效呢。。。

--  作者:有点甜
--  发布时间:2018/7/13 18:32:00
--  

1、加入msgbox,看AppendCookie的代码是否执行了。

 

执行 AppendCookie 以后,要继续跳转到另一个网页,cookie才会生效的。

 

2、你也可以使用vars变量记录值,注意vars变量的名称,要改成 用户名_yzm,要区别不同的用户名。


--  作者:fubblyc
--  发布时间:2018/7/14 9:02:00
--  
甜老师,如果用vars变量
我是用js来判断验证码是否正确:

注册页面wxzhuce.htm
    wb.AddForm("","form1","").Attribut e = "onsubmi t=\'return valid()\'" \'调用函数
valid函数代码:
//获取cookie字符串 
var strCookie=document.cookie; 
//将多cookie切割为多个名/值对 
var arrCookie=strCookie.split("; "); 
var yzm; 

//遍历cookie数组,处理每个cookie对 
for(var i=0;i<arrCookie.length;i++){ 
var arr=arrCookie[i].split("="); 
alert(arr[0] + arr[1]);

//找到名称为yzm的cookie,并返回它的值 
if("yzm"==arr[0]){ 
yzm =arr[1]; 
break; 
}

alert("验证码cookies:" + yzm)

if (v3 !== yzm) {alert("验证码错误");return false}

那用vars 要怎么做呢?
[此贴子已经被作者于2018/7/14 9:05:22编辑过]

--  作者:fubblyc
--  发布时间:2018/7/14 9:26:00
--  
老师,执行 AppendCookie 以后,要继续跳转到另一个网页,cookie才会生效的。

http://yijiansoft.net/yhqshouye.htm
这样cookie是有生效。因为在wxzhuce.htm  注册页面 通过Js执行了faduanxin.htm里的添加cookie
然后返回wxzhuce.htm

但是为什么用跳转的就不行呢。
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8921022fc595bc93&redirect_uri=http%3a%2f%2fwww.yijiansoft.net&response_type=code&scope=snsapi_userinfo&state=antashandong#wechat_redirect

wxzhuce.htm注册的代码:
.AddVcodeButton("vyz","获取验证码",2).Attribute="onclic k=\'getNum()\';"

function getNum() 代码:
var result = sendAjaxText(document.getElementById("mobi").value, "faduanxin.htm","",false); 
alert(result)

faduanxin.htm代码:
发送成功后:
    e.AppendCookie("yzm", yzm)
    e.WriteString("发送完毕!如果60秒后没有收到短信请重新发送!")
[此贴子已经被作者于2018/7/14 9:44:50编辑过]

--  作者:有点蓝
--  发布时间:2018/7/14 10:03:00
--  
不要使用e.AppendCookie


If Verified AndAlso e.Path = "logon.htm"  Then \'如果用户访问的是登录页,且身份验证成功
    wb.AppendCookie("username",UserName) 
\'
将用户名和密码写入cookie
    wb.AppendCookie("password",Password)
    wb.InsertHTML
("<meta http-equiv=\'Refresh\' content=\'0; url=/default.htm\'>") \'
直接跳转到首页
    e.WriteString(wb.Build) 
\'
生成网页
    Return 
\'
必须的
[此贴子已经被作者于2018/7/14 10:03:37编辑过]

--  作者:fubblyc
--  发布时间:2018/7/14 10:22:00
--  
蓝老师,发短信的页面faduanxin.htm代码:
Dim f As String = http.responseText
If f.Contains("SUCCESS") And f.Contains("0") Then
    PopMessage("发短信:" & yzm)    
    wb.AppendCookie("yzm", yzm)
    \'e.WriteString("发送完毕!如果60秒后没有收到短信请重新发送!")
    e.WriteString(wb.Build) \'生成网页
Else
    e.WriteString(f)
End If
是有生成cookie,如下图。

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20180714101817.png
图片点击可在新窗口打开查看
但是js中获取cookie还是没有

function valid(){
//获取cookie字符串 
var strCookie=document.cookie; 
//将多cookie切割为多个名/值对 
var arrCookie=strCookie.split("; "); 
var yzm; 
var yzmy; 
var zhangtaowxzc1;
//遍历cookie数组,处理每个cookie对 
for(var i=0;i<arrCookie.length;i++){ 
var arr=arrCookie[i].split("="); 
alert(arr[0] + arr[1]);

//找到名称为yzm的cookie,并返回它的值 
if("yzm"==arr[0]){ 
yzm =arr[1]; 
//break; 
}

else if("zhangtaowxzc1"==arr[0]){ 
zhangtaowxzc1 =arr[1]; 
break; 

alert("验证码cookies:" + yzm)   
if (v3 !== yzm) {alert("验证码错误");return false}
}
弹出 验证码cookies:不存在的英文
       验证码错误
[此贴子已经被作者于2018/7/14 10:25:30编辑过]

--  作者:有点蓝
--  发布时间:2018/7/14 10:27:00
--  
添加cookie的页面结束后js才能取到值,也就是跳转到其它页面,其它页面的js才能取到值。

如果要在当前页面使用,可以使用标记数据http://www.foxtable.com/mobilehelp/scr/0127.htm