以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- httprequest代码:发现因为cookie名txt创建不成功,再次进入personal页面,自动退出 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=108298) |
-- 作者:zhangjian222200 -- 发布时间:2017/10/19 21:00:00 -- httprequest代码:发现因为cookie名txt创建不成功,再次进入personal页面,自动退出 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 以下内容是专门发给有点色,有点蓝,狐狸爸爸浏览 |
-- 作者:有点甜 -- 发布时间:2017/10/19 21:17:00 -- 1、设置cookie后,你执行了 e.WriteString 了吗?不执行是不会帮你设置的。
2、msgbox各个cookie的值看是否正确。 |
-- 作者:zhangjian222200 -- 发布时间: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编辑过]
|
-- 作者:有点甜 -- 发布时间:2017/10/19 21:58:00 -- 这句去掉 e.response.Redirect("/" & path0)
改成 wb.InsertHTML("<meta http-equiv=\'Refresh\' content=\'0; url=/" & path0 & "?rand=123\'>")
|
-- 作者:zhangjian222200 -- 发布时间:2017/10/19 22:13:00 -- 楼上rand=123,是做什么的? |
-- 作者:有点甜 -- 发布时间:2017/10/19 22:16:00 -- 以下是引用zhangjian222200在2017/10/19 22:13:00的发言:
楼上rand=123,是做什么的?
没有意义的,不需要关心这个细节。关键是你功能是否实现。
如果没有实现功能,做个简单的例子发上来看看。说明你要做什么。 |
-- 作者:zhangjian222200 -- 发布时间:2017/10/19 22:53:00 -- 按4楼方法,不要rand,就可以了,太感谢了! |