'如果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