网站启动SSL, http变为https后,session验证码错误解决方法

 
最近公司需要后台启动安全证书,证书安装完毕后,后台老提示 验证码错误,经过几天的研究,此问题已经得到有效解决,现把方法如下。
 
一、问题展示
 
 
看到此问题后,我求助了伟大的互联网,网上大概的解决方法,是说要写两个session,不能相互互通,按照这个思路,我整了几天不见好,后来我重新写了一段代码,问题解决,其实根本不需要写两个session,先公布解决方法。
 
二、解决方法
 
原来的验证码代码
 
<script language="vbscript" runat="server">

    Option Explicit '显示声明
Dim showErrorImg
showErrorImg = False function ChkPost()
dim server_v1,server_v2
chkpost=false
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
If Mid(server_v1,8,Len(server_v2))<>server_v2 then
chkpost=False
else
chkpost=True
end If
end Function If Not ChkPost() Then
showErrorImg = true
End If Class Com_GifCode_Class
Public Noisy, Count, Width, Height, Angle, Offset, Border
Private Graph(), Margin(3)
Private Sub Class_Initialize()
Randomize
Noisy = 1 ' 干扰点出现的概率
Count = 4 ' 字符数量
Width = 40 ' 图片宽度
Height = 20 ' 图片高度
Angle = 2 ' 角度随机变化量
Offset = 15 ' 偏移随机变化量
Border = 1.5 ' 边框大小
End Sub Public Function Create2(str)
Dim i
Dim vIndex
ReDim Graph(Width-1, Height-1)
For i = 0 To Count - 1
vIndex=CInt(Mid(str,i+1,1)-1)
SetDraw vIndex, i
Next
End Function Sub SetDot(pX, pY)
If pX * (Width-pX-1) >= 0 And pY * (Height-pY-1) >= 0 Then
Graph(pX, pY) = 1
End If
End Sub Public Sub SetDraw(pIndex, pNumber)
' 字符数据字典
If pIndex=-1 Then pIndex=9 Dim DotData(9)
DotData(0) = Array(30, 15, 50, 1, 50, 100)
DotData(1) = Array(1 ,34 ,30 ,1 ,71, 1, 100, 34, 1, 100, 93, 100, 100, 86)
DotData(2) = Array(1, 1, 100, 1, 42, 42, 100, 70, 50, 100, 1, 70)
DotData(3) = Array(100, 73, 6, 73, 75, 6, 75, 100)
DotData(4) = Array(100, 1, 1, 1, 1, 50, 50, 35, 100, 55, 100, 80, 50, 100, 1, 95)
DotData(5) = Array(100, 20, 70, 1, 20, 1, 1, 30, 1, 80, 30, 100, 70, 100, 100, 80, 100, 60, 70, 50, 30, 50, 1, 60)
DotData(6) = Array(6, 26, 6, 6, 100, 6, 53, 100)
DotData(7) = Array(100, 30, 100, 20, 70, 1, 30, 1, 1, 20, 1, 30, 100, 70, 100, 80, 70, 100, 30, 100, 1, 80, 1, 70, 100, 30)
DotData(8) = Array(1, 80, 30, 100, 80, 100, 100, 70, 100, 20, 70, 1, 30, 1, 1, 20, 1, 40, 30, 50, 70, 50, 100, 40)
DotData(9) = Array(100, 20, 70, 1, 20, 1, 1, 30, 1, 80, 30, 100, 70, 100, 100, 80, 100, 60, 90, 20, 80,3) Dim vExtent : vExtent = Width / Count Margin(0) = Border + vExtent * (Rnd * Offset) / 100 + Margin(1) Margin(1) = vExtent * (pNumber + 1) - Border - vExtent * (Rnd * Offset) / 100 Margin(2) = Border + Height * (Rnd * Offset) / 100 Margin(3) = Height - Border - Height * (Rnd * Offset) / 100 Dim vStartX, vEndX, vStartY, vEndY
Dim vWidth, vHeight, vDX, vDY, vDeltaT
Dim vAngle, vLength vWidth =Int(Margin(1) - Margin(0))
vHeight =Int(Margin(3) - Margin(2))
vStartX = Int((DotData(pIndex)(0)-1) * vWidth / 100)
vStartY = Int((DotData(pIndex)(1)-1) * vHeight / 100) Dim i, j
For i = 1 To UBound(DotData(pIndex), 1)/2
If DotData(pIndex)(2*i-2) <> 0 And DotData(pIndex)(2*i) <> 0 Then
vEndX = (DotData(pIndex)(2*i)-1) * vWidth / 100
vEndY = (DotData(pIndex)(2*i+1)-1) * vHeight / 100
vDX = vEndX - vStartX
vDY = vEndY - vStartY
If vDX = 0 Then
vAngle = Sgn(vDY) * 3.14 /2
Else
vAngle = Atn(vDY / vDX)
End If
If Sin(vAngle) = 0 Then
vLength = vDX
Else
vLength = vDY / Sin(vAngle)
End If
vAngle = vAngle + (Rnd - 0.5) * 2 * Angle * 3.14 * 2 / 100
vDX = Int(Cos(vAngle) * vLength)
vDY = Int(Sin(vAngle) * vLength)
If Abs(vDX) > Abs(vDY) Then vDeltaT = Abs(vDX) Else vDeltaT = Abs(vDY)
For j = 1 To vDeltaT
SetDot Margin(0) + vStartX + j * vDX / vDeltaT, Margin(2) + vStartY + j * vDY / vDeltaT
Next
vStartX = vStartX + vDX
vStartY = vStartY + vDY
End If
Next
End Sub Public Sub Output()
Response.Expires = -9999
Response.AddHeader "pragma", "no-cache"
Response.AddHeader "cache-ctrol", "no-cache"
Response.ContentType = "image/gif"
Response.BinaryWrite ChrB(Asc("G")) & ChrB(Asc("I")) & ChrB(Asc("F"))
Response.BinaryWrite ChrB(Asc("8")) & ChrB(Asc("9")) & ChrB(Asc("a"))
Response.BinaryWrite ChrB(Width Mod 256) & ChrB((Width \ 256) Mod 256)
Response.BinaryWrite ChrB(Height Mod 256) & ChrB((Height \ 256) Mod 256)
Response.BinaryWrite ChrB(128) & ChrB(0) & ChrB(0)
Response.BinaryWrite ChrB(250) & ChrB(250) & ChrB(250)
Response.BinaryWrite ChrB(0) & ChrB(0) & ChrB(0)
Response.BinaryWrite ChrB(Asc(","))
Response.BinaryWrite ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0)
Response.BinaryWrite ChrB(Width Mod 256) & ChrB((Width \ 256) Mod 256)
Response.BinaryWrite ChrB(Height Mod 256) & ChrB((Height \ 256) Mod 256)
Response.BinaryWrite ChrB(0) & ChrB(7) & ChrB(255) Dim x, y, i : i = 0
For y = 0 To Height - 1
For x = 0 To Width - 1
If Rnd < Noisy / 100 Then
Response.BinaryWrite ChrB(1-Graph(x, y))
ElseIf x * (x-Width) = 0 Or y * (y-Height) = 0 Then
Response.BinaryWrite ChrB(Graph(x, y))
ElseIf Graph(x-1, y) = 1 Or Graph(x, y) Or Graph(x, y-1) = 1 Then
Response.BinaryWrite ChrB(1)
Else
Response.BinaryWrite ChrB(0)
End If If (y * Width + x + 1) Mod 126 = 0 Then
Response.BinaryWrite ChrB(128)
i = i + 1
End If
If (y * Width + x + i + 1) Mod 255 = 0 Then
If (Width*Height - y * Width - x - 1) > 255 Then
Response.BinaryWrite ChrB(255)
Else
Response.BinaryWrite ChrB(Width * Height Mod 255)
End If
End If
Next
Next
Response.BinaryWrite ChrB(128) & ChrB(0) & ChrB(129) & ChrB(0) & ChrB(59)
End Sub
End Class
'''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim mCode
Set mCode = New Com_GifCode_Class Randomize
Dim code
code = Int(Rnd * 9000 + 1000)
If showErrorImg Then
Session("GetCode") = Int(Rnd * 9000 + 1000)
else
Session("GetCode") = code
End If mCode.Create2(code)
mCode.Output() </script>

重写之后的代码

<%
Const nMaxSaturation = ' 最大色彩饱和度
Const nBlankNoisyDotOdds = 0.2 ' 空白处噪点率
Const nColorNoisyDotOdds = ' 有色处噪点率
Const nCharCount = ' 产生的字符个数
Const nPixelWidth = ' 单个字符位图的宽度
Const nPixelHeight = ' 单个字符位图的高度
Const nColorHue = ' 显示验证码的色调(-1表示随机色调, -2表示灰度色调)
Const nAngleRandom = ' 角度随机量
Const nLengthRandom = ' 长度随机量(百分比)
Const cCharSet = ""
' 构成验证码的字符集
' 如果扩充了下边的字母矢量库,则可以相应扩充这个字符集 Dim Buf(), DigtalStr
Dim Lines(), LineCount
Dim CursorX, CursorY, DirX, DirY Randomize
Call CreatValidCode("GetCode") Sub CDGen_Reset()
' 复位矢量笔和环境变量
LineCount =
CursorX =
CursorY =
' 初始的光笔方向是垂直向下
DirX =
DirY =
End Sub Sub CDGen_Clear()
' 清空位图阵列
Dim i, j
ReDim Buf(nPixelHeight - , nCharCount * nPixelWidth - ) For j = To nPixelHeight -
For i = To nCharCount * nPixelWidth -
Buf(j, i) =
Next
Next
End Sub Sub CDGen_PSet(X, Y)
' 在位图阵列上画点
Buf(Y, X) =
End Sub Sub CDGen_Line(X1, Y1, X2, Y2)
' 在位图阵列上画线
Dim DX, DY, DeltaT, i DX = X2 - X1
DY = Y2 - Y1
If Abs(DX) > Abs(DY) Then DeltaT = Abs(DX) Else DeltaT = Abs(DY)
For i = To DeltaT
CDGen_PSet X1 + DX * i / DeltaT, Y1 + DY * i / DeltaT
Next
End Sub Sub CDGen_FowardDraw(nLength)
' 按当前光笔方向绘制指定长度并移动光笔,正数表示从左向右/从上向下绘制,负数表示从右向左/从下向上绘制
nLength = Sgn(nLength) * Abs(nLength) * ( - nLengthRandom / + Rnd * nLenghtRandom * / )
ReDim Preserve Lines(, LineCount)
Lines(, LineCount) = CursorX
Lines(, LineCount) = CursorY
CursorX = CursorX + DirX * nLength
CursorY = CursorY + DirY * nLength
Lines(, LineCount) = CursorX
Lines(, LineCount) = CursorY
LineCount = LineCount +
End Sub Sub CDGen_SetDirection(nAngle)
' 按指定角度设定画笔方向, 正数表示相对当前方向顺时针改变方向,负数表示相对当前方向逆时针改变方向
Dim DX, DY nAngle = Sgn(nAngle) * (Abs(nAngle) - nAngleRandom + Rnd * nAngleRandom * ) / * 3.1415926
DX = DirX
DY = DirY
DirX = DX * Cos(nAngle) - DY * Sin(nAngle)
DirY = DX * Sin(nAngle) + DY * Cos(nAngle)
End Sub Sub CDGen_MoveToMiddle(nActionIndex, nPercent)
' 将画笔光标移动到指定动作的中间点上,nPercent为中间位置的百分比
Dim DeltaX, DeltaY DeltaX = Lines(, nActionIndex) - Lines(, nActionIndex)
DeltaY = Lines(, nActionIndex) - Lines(, nActionIndex)
CursorX = Lines(, nActionIndex) + Sgn(DeltaX) * Abs(DeltaX) * nPercent /
CursorY = Lines(, nActionIndex) + Sgn(DeltaY) * Abs(DeltaY) * nPercent /
End Sub Sub CDGen_MoveCursor(nActionIndex)
' 将画笔光标移动到指定动作的起始点上
CursorX = Lines(, nActionIndex)
CursorY = Lines(, nActionIndex)
End Sub Sub CDGen_Close(nActionIndex)
' 将当前光笔位置与指定动作的起始点闭合并移动光笔
ReDim Preserve Lines(, LineCount)
Lines(, LineCount) = CursorX
Lines(, LineCount) = CursorY
CursorX = Lines(, nActionIndex)
CursorY = Lines(, nActionIndex)
Lines(, LineCount) = CursorX
Lines(, LineCount) = CursorY
LineCount = LineCount +
End Sub Sub CDGen_CloseToMiddle(nActionIndex, nPercent)
' 将当前光笔位置与指定动作的中间点闭合并移动光笔,nPercent为中间位置的百分比
Dim DeltaX, DeltaY ReDim Preserve Lines(, LineCount)
Lines(, LineCount) = CursorX
Lines(, LineCount) = CursorY
DeltaX = Lines(, nActionIndex) - Lines(, nActionIndex)
DeltaY = Lines(, nActionIndex) - Lines(, nActionIndex)
CursorX = Lines(, nActionIndex) + Sgn(DeltaX) * Abs(DeltaX) * nPercent /
CursorY = Lines(, nActionIndex) + Sgn(DeltaY) * Abs(DeltaY) * nPercent /
Lines(, LineCount) = CursorX
Lines(, LineCount) = CursorY
LineCount = LineCount +
End Sub Sub CDGen_Flush(X0, Y0)
' 按照当前的画笔动作序列绘制位图点阵
Dim MaxX, MinX, MaxY, MinY
Dim DeltaX, DeltaY, StepX, StepY, OffsetX, OffsetY
Dim i MaxX = MinX = MaxY = MinY =
For i = To LineCount -
If MaxX < Lines(, i) Then MaxX = Lines(, i)
If MaxX < Lines(, i) Then MaxX = Lines(, i)
If MinX > Lines(, i) Then MinX = Lines(, i)
If MinX > Lines(, i) Then MinX = Lines(, i)
If MaxY < Lines(, i) Then MaxY = Lines(, i)
If MaxY < Lines(, i) Then MaxY = Lines(, i)
If MinY > Lines(, i) Then MinY = Lines(, i)
If MinY > Lines(, i) Then MinY = Lines(, i)
Next
DeltaX = MaxX - MinX
DeltaY = MaxY - MinY
If DeltaX = Then DeltaX =
If DeltaY = Then DeltaY =
MaxX = MinX
MaxY = MinY
If DeltaX > DeltaY Then
StepX = (nPixelWidth - ) / DeltaX
StepY = (nPixelHeight - ) / DeltaX
OffsetX =
OffsetY = (DeltaX - DeltaY) /
Else
StepX = (nPixelWidth - ) / DeltaY
StepY = (nPixelHeight - ) / DeltaY
OffsetX = (DeltaY - DeltaX) /
OffsetY =
End If
For i = To LineCount -
Lines(, i) = Round((Lines(, i) - MaxX + OffsetX) * StepX, )
If Lines(, i) < Then Lines(, i) =
If Lines(, i) >= nPixelWidth - Then Lines(, i) = nPixelWidth -
Lines(, i) = Round((Lines(, i) - MaxY + OffsetY) * StepY, )
If Lines(, i) < Then Lines(, i) =
If Lines(, i) >= nPixelHeight - Then Lines(, i) = nPixelHeight -
Lines(, i) = Round((Lines(, i) - MinX + OffsetX) * StepX, )
If Lines(, i) < Then Lines(, i) =
If Lines(, i) >= nPixelWidth - Then Lines(, i) = nPixelWidth -
Lines(, i) = Round((Lines(, i) - MinY + OffsetY) * StepY, )
If Lines(, i) < Then Lines(, i) =
If Lines(, i) >= nPixelHeight - Then Lines(, i) = nPixelHeight -
CDGen_Line Lines(, i) + X0 + , Lines(, i) + Y0 + , Lines(, i) + X0 + , Lines(, i) + Y0 +
Next
End Sub Sub CDGen_Char(cChar, X0, Y0)
' 在指定坐标处生成指定字符的位图阵列
CDGen_Reset
Select Case cChar
Case ""
CDGen_SetDirection - ' 逆时针60度(相对于垂直线)
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection - ' 逆时针60度
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection ' 顺时针120度
CDGen_FowardDraw 1.5 ' 绘制1.5个单位
CDGen_SetDirection - ' 逆时针60度
CDGen_FowardDraw 0.7 ' 绘制0.7个单位
CDGen_SetDirection - ' 顺时针120度
CDGen_FowardDraw 0.7 ' 绘制0.7个单位
CDGen_Close ' 封闭当前笔与第0笔(0开始)
Case ""
CDGen_SetDirection - ' 逆时针90度(相对于垂直线)
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
CDGen_MoveToMiddle , ' 移动画笔的位置到第0笔(0开始)的50%处
CDGen_SetDirection ' 逆时针90度
CDGen_FowardDraw -1.4 ' 反方向绘制1.4个单位
CDGen_SetDirection ' 逆时针30度
CDGen_FowardDraw 0.4 ' 绘制0.4个单位
Case ""
CDGen_SetDirection ' 顺时针45度(相对于垂直线)
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection - ' 逆时针120度
CDGen_FowardDraw 0.4 ' 绘制0.4个单位
CDGen_SetDirection ' 顺时针60度
CDGen_FowardDraw 0.6 ' 绘制0.6个单位
CDGen_SetDirection ' 顺时针60度
CDGen_FowardDraw 1.6 ' 绘制1.6个单位
CDGen_SetDirection - ' 逆时针135度
CDGen_FowardDraw 1.0 ' 绘制1.0个单位
Case ""
CDGen_SetDirection - ' 逆时针90度(相对于垂直线)
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
CDGen_SetDirection ' 顺时针135度
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
CDGen_SetDirection - ' 逆时针120度
CDGen_FowardDraw 0.6 ' 绘制0.6个单位
CDGen_SetDirection ' 顺时针80度
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
CDGen_SetDirection ' 顺时针60度
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
CDGen_SetDirection ' 顺时针60度
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
Case ""
CDGen_SetDirection ' 顺时针20度(相对于垂直线)
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
CDGen_SetDirection - ' 逆时针110度
CDGen_FowardDraw 1.2 ' 绘制1.2个单位
CDGen_MoveToMiddle , ' 移动画笔的位置到第1笔(0开始)的60%处
CDGen_SetDirection ' 顺时针90度
CDGen_FowardDraw 0.7 ' 绘制0.7个单位
CDGen_MoveCursor ' 移动画笔到第2笔(0开始)的开始处
CDGen_FowardDraw -1.5 ' 反方向绘制1.5个单位
Case ""
CDGen_SetDirection ' 顺时针90度(相对于垂直线)
CDGen_FowardDraw 1.0 ' 绘制1.0个单位
CDGen_SetDirection - ' 逆时针90度
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
CDGen_SetDirection - ' 逆时针90度
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
CDGen_SetDirection ' 顺时针30度
CDGen_FowardDraw 0.4 ' 绘制0.4个单位
CDGen_SetDirection ' 顺时针60度
CDGen_FowardDraw 0.4 ' 绘制0.4个单位
CDGen_SetDirection ' 顺时针30度
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
CDGen_SetDirection ' 顺时针60度
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
Case ""
CDGen_SetDirection - ' 逆时针60度(相对于垂直线)
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection - ' 逆时针60度
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection ' 顺时针120度
CDGen_FowardDraw 1.5 ' 绘制1.5个单位
CDGen_SetDirection ' 顺时针120度
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection ' 顺时针120度
CDGen_FowardDraw 0.7 ' 绘制0.7个单位
CDGen_SetDirection ' 顺时针120度
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection ' 顺时针120度
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
CDGen_CloseToMiddle , ' 将当前画笔位置与第2笔(0开始)的50%处封闭
Case ""
CDGen_SetDirection ' 顺时针180度(相对于垂直线)
CDGen_FowardDraw 0.3 ' 绘制0.3个单位
CDGen_SetDirection ' 顺时针90度
CDGen_FowardDraw 0.9 ' 绘制0.9个单位
CDGen_SetDirection ' 顺时针120度
CDGen_FowardDraw 1.3 ' 绘制1.3个单位
Case ""
CDGen_SetDirection - ' 逆时针60度(相对于垂直线)
CDGen_FowardDraw -0.8 ' 反方向绘制0.8个单位
CDGen_SetDirection - ' 逆时针60度
CDGen_FowardDraw -0.8 ' 反方向绘制0.8个单位
CDGen_SetDirection ' 顺时针120度
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
CDGen_SetDirection ' 顺时针110度
CDGen_FowardDraw -1.5 ' 反方向绘制1.5个单位
CDGen_SetDirection - ' 逆时针110度
CDGen_FowardDraw 0.9 ' 绘制0.9个单位
CDGen_SetDirection ' 顺时针60度
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
CDGen_SetDirection ' 顺时针60度
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
CDGen_SetDirection ' 顺时针60度
CDGen_FowardDraw 0.9 ' 绘制0.9个单位
CDGen_SetDirection ' 顺时针70度
CDGen_FowardDraw 1.5 ' 绘制1.5个单位
CDGen_Close ' 封闭当前笔与第0笔(0开始)
Case ""
CDGen_SetDirection ' 逆时针60度(相对于垂直线)
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection - ' 逆时针60度
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection - ' 顺时针120度
CDGen_FowardDraw -1.5 ' 绘制1.5个单位
CDGen_SetDirection - ' 顺时针120度
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection - ' 顺时针120度
CDGen_FowardDraw -0.7 ' 绘制0.7个单位
CDGen_SetDirection ' 顺时针120度
CDGen_FowardDraw 0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection - ' 顺时针120度
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
CDGen_CloseToMiddle , ' 将当前画笔位置与第2笔(0开始)的50%处封闭
' 以下为字母的矢量动作,有兴趣的可以继续
Case "A"
CDGen_SetDirection -(Rnd * + ) ' 逆时针150-170度(相对于垂直线)
CDGen_FowardDraw Rnd * 0.2 + 1.1 ' 绘制1.1-1.3个单位
CDGen_SetDirection Rnd * + ' 顺时针140-160度
CDGen_FowardDraw Rnd * 0.2 + 1.1 ' 绘制1.1-1.3个单位
CDGen_MoveToMiddle , ' 移动画笔的位置到第1笔(0开始)的30%处
CDGen_CloseToMiddle , ' 将当前画笔位置与第1笔(0开始)的70%处封闭
Case "B"
CDGen_SetDirection -(Rnd * + ) ' 逆时针50-70度(相对于垂直线)
CDGen_FowardDraw Rnd * 0.4 + 0.8 ' 绘制0.8-1.2个单位
CDGen_SetDirection Rnd * + ' 顺时针110-130度
CDGen_FowardDraw Rnd * 0.2 + 0.6 ' 绘制0.6-0.8个单位
CDGen_SetDirection -(Rnd * + ) ' 逆时针110-130度
CDGen_FowardDraw Rnd * 0.2 + 0.6 ' 绘制0.6-0.8个单位
CDGen_SetDirection Rnd * + ' 顺时针110-130度
CDGen_FowardDraw Rnd * 0.4 + 0.8 ' 绘制0.8-1.2个单位
CDGen_Close ' 封闭当前笔与第1笔(0开始)
Case "C"
CDGen_SetDirection - ' 逆时针60度(相对于垂直线)
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection - ' 逆时针60度
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection ' 顺时针120度
CDGen_FowardDraw 1.5 ' 绘制1.5个单位
CDGen_SetDirection ' 顺时针120度
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
CDGen_SetDirection ' 顺时针120度
CDGen_FowardDraw 0.7 ' 绘制0.7个单位
End Select
CDGen_Flush X0, Y0
End Sub Sub CDGen_Blur()
' 对产生的位图进行柔化处理
Dim i, j For j = To nPixelHeight -
For i = To nCharCount * nPixelWidth -
If Buf(j, i) = Then
If ((Buf(j, i - ) Or Buf(j + , i)) And ) <> Then
' 如果当前点是空白点,且上下左右四个点中有一个点是有色点,则该点做柔化处理
Buf(j, i) =
End If
End If
Next
Next
End Sub Sub CDGen_NoisyDot()
' 对产生的位图进行噪点处理
Dim i, j, NoisyDot, CurDot For j = To nPixelHeight -
For i = To nCharCount * nPixelWidth -
If Buf(j, i) <> Then
NoisyDot = Int(Rnd * Rnd * nMaxSaturation)
Select Case nColorNoisyDotOdds
Case
CurDot = nMaxSaturation
Case
CurDot =
Case Else
CurDot = NoisyDot
End Select
If Rnd < nColorNoisyDotOdds Then Buf(j, i) = CurDot Else Buf(j, i) = nMaxSaturation
Else
NoisyDot = Int(Rnd * nMaxSaturation)
Select Case nBlankNoisyDotOdds
Case
CurDot =
Case
CurDot = nMaxSaturation
Case Else
CurDot = NoisyDot
End Select
If Rnd < nBlankNoisyDotOdds Then Buf(j, i) = CurDot Else Buf(j, i) =
End If
Next
Next
End Sub Sub CDGen()
' 生成位图阵列
Dim i, Ch DigtalStr = ""
CDGen_Clear
For i = To nCharCount -
Ch = Mid(cCharSet, Int(Rnd * Len(cCharSet)) + , )
DigtalStr = DigtalStr + Ch
CDGen_Char Ch, i * nPixelWidth,
Next
CDGen_Blur
CDGen_NoisyDot
End Sub Function HSBToRGB(vH, vS, vB)
' 将颜色值由HSB转换为RGB
Dim aRGB(), RGB1st, RGB2nd, RGB3rd
Dim nH, nS, nB
Dim lH, nF, nP, nQ, nT vH = (vH Mod )
If vS > Then
vS =
ElseIf vS < Then
vS =
End If
If vB > Then
vB =
ElseIf vB < Then
vB =
End If
If vS > Then
nH = vH /
nS = vS /
nB = vB /
lH = Int(nH)
nF = nH - lH
nP = nB * ( - nS)
nQ = nB * ( - nS * nF)
nT = nB * ( - nS * ( - nF))
Select Case lH
Case
aRGB() = nB *
aRGB() = nT *
aRGB() = nP *
Case
aRGB() = nQ *
aRGB() = nB *
aRGB() = nP *
Case
aRGB() = nP *
aRGB() = nB *
aRGB() = nT *
Case
aRGB() = nP *
aRGB() = nQ *
aRGB() = nB *
Case
aRGB() = nT *
aRGB() = nP *
aRGB() = nB *
Case
aRGB() = nB *
aRGB() = nP *
aRGB() = nQ *
End Select
Else
aRGB() = (vB * ) /
aRGB() = aRGB()
aRGB() = aRGB()
End If
HSBToRGB = ChrB(Round(aRGB(), )) & ChrB(Round(aRGB(), )) & ChrB(Round(aRGB(), ))
End Function Sub CreatValidCode(pSN)
Dim i, j, CurColorHue ' 禁止缓存
Response.Expires = -
Response.AddHeader "pragma", "no-cache"
Response.AddHeader "cache-ctrol", "no-cache"
Response.ContentType = "image/bmp" Call CDGen
Session(pSN) = DigtalStr '记录入Session Dim PicWidth, PicHeight, FileSize, PicDataSize
PicWidth = nCharCount * nPixelWidth
PicHeight = nPixelHeight
PicDataSize = PicWidth * PicHeight *
FileSize = PicDataSize + ' 输出BMP文件信息头
Response.BinaryWrite ChrB() & ChrB() & _
ChrB(FileSize Mod ) & ChrB((FileSize \ ) Mod ) & ChrB((FileSize \ \ ) Mod ) & ChrB(FileSize \ \ \ ) & _
ChrB() & ChrB() & ChrB() & ChrB() & _
ChrB() & ChrB() & ChrB() & ChrB() ' 输出BMP位图信息头
Response.BinaryWrite ChrB() & ChrB() & ChrB() & ChrB() & _
ChrB(PicWidth Mod ) & ChrB((PicWidth \ ) Mod ) & ChrB((PicWidth \ \ ) Mod ) & ChrB(PicWidth \ \ \ ) & _
ChrB(PicHeight Mod ) & ChrB((PicHeight \ ) Mod ) & ChrB((PicHeight \ \ ) Mod ) & ChrB(PicHeight \ \ \ ) & _
ChrB() & ChrB() & _
ChrB() & ChrB() & _
ChrB() & ChrB() & ChrB() & ChrB() & _
ChrB(PicDataSize Mod ) & ChrB((PicDataSize \ ) Mod ) & ChrB((PicDataSize \ \ ) Mod ) & ChrB(PicDataSize \ \ \ ) & _
ChrB() & ChrB() & ChrB() & ChrB() & _
ChrB() & ChrB() & ChrB() & ChrB() & _
ChrB() & ChrB() & ChrB() & ChrB() & _
ChrB() & ChrB() & ChrB() & ChrB() ' 逐点输出位图阵列
If nColorHue = - Then
CurColorHue = Int(Rnd * )
ElseIf nColorHue = - Then
CurColorHue =
Else
CurColorHue = nColorHue
End If
For j = To nPixelHeight -
For i = To Len(DigtalStr) * nPixelWidth -
If nColorHue = - Then
Response.BinaryWrite HSBToRGB(CurColorHue, , - Buf(nPixelHeight - - j, i))
Else
Response.BinaryWrite HSBToRGB(CurColorHue, Buf(nPixelHeight - - j, i), )
End If
Next
Next
End Sub
%>
 
问题解决。

网站启动SSL, http变为https后,session验证码错误解决方法的更多相关文章

  1. Linux启动网卡时出现RTNETLINK answers: File exists错误解决方法

    这里说一下,如果复制了虚拟机,设置新的MAC地址为什么? 在虚拟机的网络设置中--->高级.然后找到如下窗口,生成新的MAC地址即可. ----------------------------- ...

  2. Dreamweaver无法启动:xml parsing fatal error..Designer.xml错误解决方法

    xml parsing fatal error:Invalid document structure,line:1,file:C:\Documents and Settings\Administrat ...

  3. 创建springbootdemo后运行报MongoSocketOpenException错误解决方法

    在类SpringbootdemoApplication上右键Run as选择Spring Boot App后Console输出报错日志如下: com.mongodb.MongoSocketOpenEx ...

  4. iis7中session丢失的解决方法小结

    这篇文章主要介绍了在windows server 2008系统中,session丢失的解决方法,供大家学习参考 问题描述: Windows Server 2008 +IIS +ASP.net +SQL ...

  5. MySQL程序端启动密码错误解决方法

    MySQL程序端启动密码错误解决方法 一般启动MySQL程序端,都是用mysql -uroot -p命令,当然前提是你的环境变量已经配好了. 为了连接服务器,当调用mysql时,通常需要提供一个MyS ...

  6. MySQL root密码忘记后更优雅的解决方法

    MySQL root密码忘记后更优雅的解决方法 https://www.jb51.net/article/143453.htm /usr/bin/mysqld_safe --defaults-file ...

  7. eclipse上一次没有正确关闭,导致启动的时候卡死错误解决方法

    关于 eclipse启动卡死的问题(eclipse上一次没有正确关闭,导致启动的时候卡死错误解决方法),自己常用的解决方法: 方案一(推荐使用,如果没有这个文件,就使用方案二): 到<works ...

  8. windows 10 删除库后自动恢复的解决方法

    目录 什么是windows 库? 手动删除不行吗? 如何正确的"删除"? title: windows 10 删除库后自动恢复的解决方法 date: 2019-06-09 15:4 ...

  9. 用eclipse 检索SVN 上 myEclipse 建的web项后,成java项目解决方法

    用eclipse 检索SVN 上 myEclipse 建的web项后,成java项目解决方法 在网上找了非常多,都无论用. 说添加.project 文件几个属性.但我发现里面都有,在我这里无论什么用. ...

随机推荐

  1. hiho#1145 : 幻想乡的日常

    描述 幻想乡一共有n处居所,编号从1到n.这些居所被n-1条边连起来,形成了一个树形的结构. 每处居所都居住着一个小精灵.每天小精灵们都会选出一个区间[l,r],居所编号在这个区间内的小精灵一起来完成 ...

  2. DataGridView控件添加数据时空白的可 错误情况

    写一个小程序,将数据库中的两张表相关信息显示在DataGridView中.代码如下: //获取项目数据,添加到表中 SqlConnection con = new SqlConnection(Main ...

  3. uva729

    /*题目一大堆,其实意思就是长度为n个二进制数,里面有h个1,将这个二进制数进行全排列,然后输出*/ #include"iostream" #include"algori ...

  4. 清除行内元素之间HTML空白的几种解决方案

    行内块(inline-block)是非常有用的,特别是想要不用'block'和'float'来控制这些行内元素的margin,padding之时. 问题来了,HTML源码中行内元素之间的空白有时候显示 ...

  5. MySQL数据库管理常用命令

    参考: http://blog.linuxeye.com/419.html 安装 利用RPM包安装MySQL   设置TCP 3306端口的iptables     root密码管理 设置root用户 ...

  6. Task Scheduler Error and Success Constants (Windows)

    If an error occurs, the Task Scheduler APIs can return one of the following error codes as an HRESUL ...

  7. metasploit 常用命令汇总

    1.连接数据并显示一些信息 db_connet username:password@ip address/database name db_destroy 同上 db_import 文件名字 db_h ...

  8. Nginx 笔记与总结(1)编译安装

    Nginx 可以承受 3 万并发连接数,Apache 默认最大连接数是 256 个. 编译安装 ① 下载 在 Nginx 的主页 http://nginx.org/ 下载最新的 stable vers ...

  9. 在UI线程之外显示Toast

    new Thread(){ public void run() { Looper.prepare(); Toast t = Toast.makeText(mContext, R.string.cras ...

  10. vbaexcel

    Sub WordTest() Dim objwordApp As Word.Application Dim objword As Word.Document Dim objSeheet As Stri ...