台灣最大程式設計社群網站
線上人數
1582
 
會員總數:241122
討論主題:186796
歡迎您免費加入會員
討論區列表 >> ASP.NET >> 我設計的網頁驗證碼圖片沒辦法顯示
[ 變換順序 ]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
我設計的網頁驗證碼圖片沒辦法顯示
價值 : 10 QP  點閱數:240 回應數:25

樓主

小羊
門外漢
0 2
74 31
發送站內信

我有寫一個aspx
Imports System.Drawing

Partial Public Class CheckImageCode
Inherits System.Web.UI.Page

Private Function GenerateCheckCode() As String
Dim number As Integer
Dim code As Char
Dim checkCode As String = String.Empty
Dim random As System.Random = New Random()
'要製造出幾個驗證碼
For i As Integer = 0 To 3
'number = random.[Next]()
number = random.Next
'亂數決定哪一個是數字或字母
If number Mod 2 = 0 Then
code = CChar(ChrW(Asc("0") + (number Mod 10)))
Else
code = CChar(ChrW(Asc("A") + (number Mod 26)))
End If
checkCode += code.ToString()
Next
'寫入Cook
Response.Cookies.Add(New HttpCookie("CheckCode", checkCode))
Return checkCode
End Function

Private Sub CreateCheckCodeImage(ByVal checkCode As String)
If checkCode Is Nothing OrElse checkCode.Trim() = [String].Empty Then
Return
End If

'System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
'System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 20)), 40);
Dim image As New System.Drawing.Bitmap(100, 30)

Dim g As Graphics = Graphics.FromImage(image)

Try
'生成隨機生成器
Dim random As New Random()

'清空圖片背景色
g.Clear(Color.White)

'畫圖片的背景噪音線
For i As Integer = 0 To 24
Dim x1 As Integer = random.[Next](image.Width)
Dim x2 As Integer = random.[Next](image.Width)
Dim y1 As Integer = random.[Next](image.Height)
Dim y2 As Integer = random.[Next](image.Height)

g.DrawLine(New Pen(Color.Silver), x1, y1, x2, y2)
Next

Dim font As Font = New System.Drawing.Font("Arial", 22, (System.Drawing.FontStyle.Bold Or System.Drawing.FontStyle.Italic))
Dim brush As New System.Drawing.Drawing2D.LinearGradientBrush(New Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, True)
'g.DrawString(checkCode, font, brush, 2, 2);
g.DrawString(checkCode, font, brush, 2, 2)

'畫圖片的前景噪音點
For i As Integer = 0 To 499
Dim x As Integer = random.[Next](image.Width)
Dim y As Integer = random.[Next](image.Height)

image.SetPixel(x, y, Color.FromArgb(random.Next))
Next

'畫圖片的邊框線
g.DrawRectangle(New Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1)

Dim ms As New System.IO.MemoryStream()
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif)
Response.ClearContent()
Response.ContentType = "image/Gif"
Response.BinaryWrite(ms.ToArray())
Finally
g.Dispose()
image.Dispose()
End Try
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
CreateCheckCodeImage(GenerateCheckCode())
End Sub
End Class

然後在登入畫面放入程式
Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles Login1.Authenticate
If Request.Cookies("CheckCode") Is Nothing Then
Me.lblMsg.Text = "無法取得Cookie,請檢察瀏覽器是否有封鎖Cookie!!"
Else
If String.Compare(Me.txtChkCode.Text.ToUpper, Request.Cookies("CheckCode").Value) <> 0 Then
Me.lblMsg.Text = "驗證碼錯誤!!"
Else
For Each R As TableRow In GridView1.Rows
If Login1.UserName = R.Cells(0).Text Then
If Login1.Password = R.Cells(1).Text Then
cn.Open()
cm.Connection = cn
cm.CommandText = "Insert Into login (account , logintime ) Values ('" & R.Cells(0).Text & "' , '" & DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") & " ')"
cm.ExecuteNonQuery()
cn.Close()
Session("Authority") = R.Cells(3).Text
If R.Cells(3).Text = "manager" Then
Response.Redirect("Default3.aspx")
Else
Response.Redirect("Default2.aspx")
End If
End If
End If
Next
End If
End If
End Sub

在前面也有放入
<asp:Image ID="imgChkCode"
ImageUrl="C:\Documents and Settings\we\My Documents\Visual Studio 2008\Projects\WebApplication1\WebApplication1\CheckImageCode.aspx"
runat="server" />
<asp:Button ID="btnReGenCode" runat="server" Text="重產驗證碼" />
<br />
但是圖片卻沒有顯示
可以請大大幫幫我嗎?

搜尋相關Tags的文章: [ ASP.NET ] , [ 驗證碼 ] , [ 網頁 ] ,
本篇文章發表於2017-11-14 09:37
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

Jerry
捐贈 VP 給 Jerry 檢舉此回應
在製作網頁時,圖片路徑不能用C:\....(絕對路徑)
因為當別人看你網頁時,別人電腦裡的C:\...
不會有圖片,你只能用相對路徑
這樣的寫法

本篇文章回覆於2017-11-14 10:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

小羊
檢舉此回應
現在問題是他不會判斷驗證碼是否正確
怎麼辦
本篇文章回覆於2017-11-14 10:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

Jerry
捐贈 VP 給 Jerry 檢舉此回應
你的驗證碼存在哪裡?
Session?
本篇文章回覆於2017-11-14 10:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

小羊
檢舉此回應
我是存在cookie裡面
我剛剛發現按enter他不會讀
反而要按login才可以
這是為甚麼?
本篇文章回覆於2017-11-14 10:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

Jerry
捐贈 VP 給 Jerry 檢舉此回應
那按enter的時候,畫面有什麼反應?
login是按鈕?
本篇文章回覆於2017-11-14 10:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

小羊
檢舉此回應
按enter畫面就像重新整理的感覺,可是驗證碼不變,反而是輸入驗證碼的格子清空了
我是用login的工具,有包含使用者帳號跟密碼
他有附login按鈕
所以function是Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles Login1.Authenticate
本篇文章回覆於2017-11-14 10:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

Jerry
捐贈 VP 給 Jerry 檢舉此回應
這兩行放在Page_Load,這樣輸入完帳號密碼enter的預設按鈕就是Login

本篇文章回覆於2017-11-14 10:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

Jerry
捐贈 VP 給 Jerry 檢舉此回應
抱歉我不是寫VB的
參考
https://blog.miniasp.com/post/2008/05/28/Set-Page-DefaultButton-to-the-Login-Button-within-Login-Control.aspx
本篇文章回覆於2017-11-14 10:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

小羊
檢舉此回應
LoginButton is not declared
Button is a type and can not be used as a expression
他會出現這兩個錯誤
本篇文章回覆於2017-11-14 11:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

Jerry
捐贈 VP 給 Jerry 檢舉此回應

本篇文章回覆於2017-11-14 11:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

Jerry
捐贈 VP 給 Jerry 檢舉此回應
本篇文章回覆於2017-11-14 11:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

小羊
檢舉此回應
Dim LoginButton As Button = DirectCast(Login1.FindControl("LoginButton"), Button)出現錯誤
她出現的錯誤訊息為
Object reference not set to an instance of an object.
本篇文章回覆於2017-11-14 11:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

Jerry
捐贈 VP 給 Jerry 檢舉此回應
你可能要用Chrome的F12去看你的Login按鈕的name屬性為何
本篇文章回覆於2017-11-14 11:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

小羊
檢舉此回應
問題是在程式中找不到按下login button的程式
所以不知道要怎麼把enter也可以當作login button的動作
本篇文章回覆於2017-11-14 11:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

Jerry
捐贈 VP 給 Jerry 檢舉此回應
知道網頁產生出來的name才知道如何FindControl阿
好讓FindControl能順利找到你的login button
不然不用此方法的話
我也不知道還有什麼方法可以解決了
本篇文章回覆於2017-11-14 11:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   

回覆
如要回應,請先登入.