Foxtable(狐表)用户栏目专家坐堂 → httprequest代码:发现因为cookie名txt创建不成功,再次进入personal页面,自动退出


  共有1634人关注过本帖树形打印复制链接

主题:httprequest代码:发现因为cookie名txt创建不成功,再次进入personal页面,自动退出

帅哥哟,离线,有人找我吗?
zhangjian222200
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1550 积分:10977 威望:0 精华:0 注册:2016/9/12 11:18:00
httprequest代码:发现因为cookie名txt创建不成功,再次进入personal页面,自动退出  发帖心情 Post By:2017/10/19 21:00:00 [显示全部帖子]

httprequest代码:发现因为cookie名txt创建不成功,再次进入personal页面,自动退出
代码较长,贴出比较关键的部分,其余请下载例子,谢谢:

'如果cookie名txt存在,且上次登录时间没有超过30分钟,直接进入下述需要验证的页面(若超过30分钟,需验证id正确,则直接进入下面的页面,若验证id不成功,则进入exit页面,最后自动进入login页面)
'---以下代码分解cookie值:txt------------
Dim drcookies As List(of DataRow)
Dim drlins As DataRow '定义,会员在"访问临表"的行
Dim huiybh As String '定义,会员编号
Dim hyshouj As String '定义,会员手机
'Dim denglsj0 As String '定义,登录时间
'Dim denglsj As Date
Dim tuicsj0 As String '定义,退出时间
Dim tuicsj As Date
Dim iduser As String '定义,userid
Dim Values0() As String '定义,txt值values数组
Dim Values() As String '定义,txt值values数组

Dim txt_huiybh As String '定义,组成txt值的组成部分(为定义新的txt做准备)
Dim txt_huiydj As String
Dim txt_xingb As String
Dim txt_shouj As String
Dim txt_yaoqm As String
Dim txt_nantnvyqm As String
Dim txt_jxsheng As String
Dim txt_jxshi As String
Dim txt_jiaxsbh As String
Dim txt_biang As String
'Dim txt_tuicsj As Date = Date.Now '因为这里是为重新定义txt做准备,所以直接使用当前时间(在后面代码中直接赋值,这里屏蔽处理)
'Dim txt_userid As String = Rand.NextString(10) '因为这里是为重新定义txt做准备,所以直接生成随机用户ID(在后面代码中直接赋值,这里屏蔽处理)
Dim txt As String '用于保存txt,并创建cookie值

If e.Cookies.ContainsKey("txt") Then
    txt = e.Cookies("txt")
    txt = DecryptText(txt,"连云港市","台州市") '解密
    Values0 = txt.split("|")
    For Index0 As Integer = 0 To Values0.Length - 1
        'msgbox(Values0(Index0)) '按|分割后,这里能正常显示(1级)(以下代码为重新赋值txt做准备)
        If Values0(Index0).Contains("会员编号") Then 
           txt_huiybh = Values0(Index0)
        ElseIf Values0(Index0).Contains("会员等级") Then
           txt_huiydj = Values0(Index0)
        ElseIf Values0(Index0).Contains("性别") Then 
           txt_xingb = Values0(Index0)
        ElseIf Values0(Index0).Contains("手机") Then 
           txt_shouj = Values0(Index0)
        ElseIf Values0(Index0).Contains("邀请码") Then 
           txt_yaoqm = Values0(Index0)
        ElseIf Values0(Index0).Contains("男推女邀请码") Then 
           txt_nantnvyqm = Values0(Index0)
        ElseIf Values0(Index0).Contains("家乡省") Then 
           txt_jxsheng = Values0(Index0)
        ElseIf Values0(Index0).Contains("家乡市") Then 
           txt_jxshi = Values0(Index0)
        ElseIf Values0(Index0).Contains("家乡市编号") Then 
           txt_jiaxsbh = Values0(Index0)
        ElseIf Values0(Index0).Contains("会员变更") Then 
           txt_biang = Values0(Index0)
        ElseIf Values0(Index0).Contains("退出时间") Then 
           '因为这里是为重新定义txt做准备,所以这里不赋值
        ElseIf Values0(Index0).Contains("userid") Then 
           '因为这里是为重新定义txt做准备,所以这里不赋值
        End If
        '将|分出的数据,再按:分出数组
        Values = Values0(Index0).split("*")
        For Index As Integer = 0 To Values.Length - 1
            If Values(0) = "会员编号" Then '赋值,会员编号
                huiybh = Values(1)
            ElseIf Values(0) = "手机" Then '赋值,会员编号
                hyshouj = Values(1)
            ElseIf Values(0) = "退出时间" Then '赋值,退出时间
                tuicsj0 = Values(1)
                Date.TryParse(tuicsj0,tuicsj)
            ElseIf Values(0) = "userid" Then '赋值,userid
                iduser = Values(1)
            End If
        Next
    Next
End If

msgbox("txt值=" & e.Cookies.ContainsKey("txt") & ",cookie退出时间=" & tuicsj) ’弹出值1,第2次比较时,不一致


'---以下代码,登录时间超过30分钟,重新希尔userid及退出时间到cookie值txt------------
If e.Path <> "login.htm" Then
    If e.Cookies.ContainsKey("txt") Then '如果存储会员全部信息的cookie存在,则进入下面需要验证的页面
        '判断时间是否超过30分钟,并进行相应的处理 '这里例子里做了处理,缩短了测试间隔,大约1分钟左右
        If Date.Now > tuicsj Then '即超出30分钟(需要判断id是否正确)(这里已经不存在tuicsj为空的情况了)
            If huiybh <> "" Then
                drlins = DataTables("访问临表").SQLFind("会员编号 = '" & huiybh & "'")
                If drlins IsNot Nothing Then
                    msgbox("第2次比较iduser=" & iduser & "|表格iduser=" & drlins("userid")) ’弹出值2,第2次比较时,不一致
                    If iduser <> "" AndAlso iduser = drlins("userid") Then '即cookie名txt的值iduser不是空,且与表内userid相同,则写入新登录时间|退出时间,并重新创建cookie名txt
                       '填写访问临表内容
                       drlins("会员编号") = huiybh
                       drlins("会员手机") = hyshouj
                       drlins("登录时间") = Date.Now
                       Dim m As New TimeSpan(0,30,0) '30分钟
                       drlins("退出时间") = Date.Now + m
                       drlins("userid") = Rand.NextString(10) '直接生成随机用户ID
                       drlins.Save
                       msgbox("有")
                       '增加cookie名txt
                       txt = EncryptText(txt_huiybh & "|" & txt_huiydj & "|" & txt_xingb & "|" & txt_shouj & "|" & txt_yaoqm & "|" & txt_nantnvyqm & "|" & txt_jxsheng & "|" & txt_jxshi & "|" & txt_jiaxsbh & "|" & txt_biang & "|退出时间*" & drlins("退出时间") & "|userid*" & drlins("userid"),"连云港市","台州市") '加密(txt在前面代码中已定义)
                       wb.AppendCookie("txt",txt,31680)  '写cookie,22天后自动删除cookie(以后再次进入本页面上一段代码,自动延长为22天)                   '可能是这里cookie创建不成功的原因,本次e.path执行完毕,后直接退出执行(下一行粉色处代码)
                       'e.response.Redirect("/" & path0)
                    ElseIf iduser = "" OrElse iduser <> drlins("userid") Then ''即cookie名txt的值iduser是空,或与表内userid不相同,则限进入exit,再进入login页面 ’退出代码
                        wb.InsertHTML("<meta http-equiv='Refresh' content='0; url=/exit.htm'>") '进入exit页面,删除掉cookie,随后将自动进入login.htm页面
                        e.WriteString(wb.Build) '生成网页
                        Return '必须的
                    End If
                ElseIf drlins Is Nothing Then '即""表内的行不存在(可能因为超出30分钟,被清理了),则在表"访问临表"重新创建一行,且重新创建cookie名txt
                    '此处代码多数不执行,暂不贴出
                End If
            ElseIf huiybh = "" Then '这种情况一般不存在的,只为防止万一
                wb.InsertHTML("<meta http-equiv='Refresh' content='0; url=/exit.htm'>") '进入exit页面,删除掉cookie,随后将自动进入login.htm页面
                e.WriteString(wb.Build) '生成网页
                Return '必须的
            End If
       'Else '即创建cookie时间没有超出30分钟,无需做任何操作,所以屏蔽这里,但不删除(此段留言,以便后续理解)
            '
        End If
        
        If e.Cookies.ContainsKey("txt") Then '即会员cookie值txt存在,且此会员不存在已访问记录(则可以不用重复验证是否已经登录)
            Select Case e.Path
                Case "personal.htm"                                   '个人中心
                    Functions.Execute("personal",e)                   'msgbox("重复编号2:" & cfdlhybh)
                    Return
                Case Else '执行到这里,若存在没有引用的函数,终止执行(但是login.htm将在最后执行)
                    Return
            End Select
        End If
    Else '如果存储会员全部信息的cookie不存在,则不进入需要验证的页面,而是直接跳转到登录页面
        wb.InsertHTML("<meta http-equiv='Refresh' content='0; url=/login.htm'>") '直接跳转到登录页面
        e.WriteString(wb.Build) '生成网页
        Return '必须的
    End If
End If


以下内容是专门发给有点色,有点蓝,狐狸爸爸浏览



 回到顶部
帅哥哟,离线,有人找我吗?
zhangjian222200
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1550 积分:10977 威望:0 精华:0 注册:2016/9/12 11:18:00
  发帖心情 Post By:2017/10/19 21:50:00 [显示全部帖子]

wb.AppendCookie("txt",txt,31680)  '写cookie,22天后自动删除cookie(以后再次进入本页面上一段代码,自动延长为22天)

1楼红色增加cookie处,增加以下3行代码,执行结果与1楼相同,重新创建cookie还是没有成功,cookie名txt的值,还是之前创建的cookie值,直接导致执行1楼最后粉色处exit代码(exit页,删除原来的cookie,删除"访问临表"内容,进入login登录页面)
e.response.Redirect("/" & path0)
e.WriteString(wb.Build) '生成网页
Return '必须的
[此贴子已经被作者于2017/10/19 21:50:03编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
zhangjian222200
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1550 积分:10977 威望:0 精华:0 注册:2016/9/12 11:18:00
  发帖心情 Post By:2017/10/19 22:13:00 [显示全部帖子]

楼上rand=123,是做什么的?

 回到顶部
帅哥哟,离线,有人找我吗?
zhangjian222200
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1550 积分:10977 威望:0 精华:0 注册:2016/9/12 11:18:00
  发帖心情 Post By:2017/10/19 22:53:00 [显示全部帖子]

按4楼方法,不要rand,就可以了,太感谢了!

 回到顶部