powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / вопрос по CAPTCHA
25 сообщений из 25, страница 1 из 1
вопрос по CAPTCHA
    #36228723
killmeplease
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привет!
делаю капчу. суть такова: пользователю показывается некая картинка и у него просят написать что на ней. при этом по имени картинки должно быть нельзя догадаться о ее содержании. и оно должно генерироваться таким образом чтобы изображение и имя не были связаны.

сейчас решение созрело такое: завести таблицу, где хранилась бы информация об идентификаторе сессии, картинке капчи и расшифровке (текст который должен ввести пользователь). при попадании пользователя на страницу регистрации, генерируется соответствующая запись в бд. при успешном прохождении регистрации или при завершении сессии запись удаляется.

пойдет ли такое решение?
или можно придумать что-то попроще?
спасибо.
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36228808
Фотография WYPMAH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
killmeplease
куки, сессия.. зачем база?

_______________
AnimeBay - аниме магазин, который Вас не разочарует.
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36228828
Фотография Khusainov_Heckfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на кодпроджекте посмотрите, там реализована капча во всяком разном виде, но без БД
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36228983
killmeplease
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
база нужна чтобы картинку хранить... из сессии ее с клиентского браузера не достанешь ведь?
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36229064
Фотография Khusainov_Heckfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как вы собираетесь кончину сессии ловить?
Браузер закрыл на крестик если юзер, как узнать что сессия закрылась?
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36229066
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
killmepleaseбаза нужна чтобы картинку хранить...
Картинку каптчи? :) У Вас будет одна и та же картинка всегда? )
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36229137
Фотография WYPMAH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
killmepleaseбаза нужна чтобы картинку хранить... из сессии ее с клиентского браузера не достанешь ведь?
рисуйте в реал-тайме, зачем хранить картинки с парой букв или цифр?

_______________
AnimeBay - аниме магазин, который Вас не разочарует.
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36229156
itsandy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с сессией тоже вариант нормальный. проверка на начало новой сессии может быть типа такой
if(Session["capthcaText"]==null)
{
// сгенерить новую капчу и записать в сессию
}
else if(Session["capthcaText"].ToString()==CapthcaTextBox.Text)
{
// введено правильно
}

и т.д.
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36229161
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WYPMAHрисуйте в реал-тайме, зачем хранить картинки с парой букв или цифр?
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36229202
Фотография Khusainov_Heckfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУWYPMAHрисуйте в реал-тайме, зачем хранить картинки с парой букв или цифр?
+1
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36230687
killmeplease
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что вы имеете ввиду под "рисуйте в реалтайме"? моя нихт ферштейн.

пока что не всё ясно. в общем то в аспнете я нуб так что не судите строго.

поясню немного мою задачу. у меня в капче не цифры а животные и предметы. они берутся с гугла:


var CText = Utils.GetCAPTCHAtxt();
var req = System.Net.WebRequest.Create("http://images.google.com/images?q=" + CText);
var sr = new StreamReader(req.GetResponse().GetResponseStream());
var responseString = sr.ReadToEnd();
sr.Close();

string imageURLSignature = @"imgurl\\x3d(?<URL>http:[^\\%]+)\\x26";
var regExpr = new Regex(imageURLSignature, RegexOptions.Compiled);
var imgURL = regExpr.Matches(responseString, 0)[new Random().Next(5)].Groups["URL"].Value;
req = System.Net.WebRequest.Create(imgURL);
var img = System.Drawing.Image.FromStream(req.GetResponse().GetResponseStream());

Session["cIMG"] = img;
Session["cTXT"] = CText;

таким образом я сохранил всю инфу в сессию.
теперь такой вопрос: как на странице всё это дело отобразить? то есть, как изображение из сессии засунуть в img на странице?

пробовал создавать httpHandler для указания его в img src, чтобы он картинку возвращал, но в нем сессию не видно. там context.Session == null. видно я чегото не вкуриваю.

подсобите плиз!
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36230854
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
killmepleaseпробовал создавать httpHandler для указания его в img src, чтобы он картинку возвращал, но в нем сессию не видно. там context.Session == null. видно я чегото не вкуриваю.

подсобите плиз!Копали в правильном направлении, но на одну лопату не докопались. :)

Вот иллюстрация, как должно работать:
Код: plaintext
1.
<img id="imcapcha" src="Handler1.ashx" /><input type="button" value="R" onclick="recapcha();" />

Здесь имеем картинку с капчей и кнопку "поменять капчу". Код (JavaScript) замены капчи далее.

Код: plaintext
1.
2.
3.
4.
var capchaNum =  0 ;
function recapcha(t) {
        document.getElementById('imcapcha').src = 'Handler1.ashx?v=' + (capchaNum++);
}

Код на сервере

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.SessionState;
using System.Drawing;
using System.Drawing.Imaging;

namespace WebApplication1
{
    public class Handler1 : IHttpHandler, IRequiresSessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.Clear();
            context.Response.CacheControl = "no-cache";
            capcha(context);
            context.Response.End();
        }
	void capcha(HttpContext context)
	{
		/*
		создаем битмап, придумываем случайное число, сохраняем его в сессии,
		рисуем и отдаем в респонсе.

		Конечно, такая простая капча легко распознается программно, но это
		всего лишь иллюстрация механизма, а рисовать число лучше какой-нибудь
		библиотекой для капчи, чтоб получилась красивая картинка :)
		*/
		Bitmap b = new Bitmap(50, 26);
		Graphics g = Graphics.FromImage(b);
		Random r = new Random();
		string ss = (r.Next(8999) + 1000).ToString();
		context.Session["scap"] = ss;

		g.DrawString(ss, new Font("Courier New", 12), Brushes.Green, new PointF(2, 2));

		context.Response.ContentType = "image/gif"; // обязательно контент тайп
		b.Save(context.Response.OutputStream, ImageFormat.Gif);
	}
        public bool IsReusable { get { return false; } }
    }
}

Далее при отправки формы остается лишь сравнить введенныю юзером капчу с тем, что в context.Session["scap"]

Обратите внимание на код на розовом фоне. Это - то самое, без чего context.Session == null :)
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36232137
killmeplease
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо! это работает

а зачем нужен capchaNum?
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36232650
Фотография WYPMAH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
killmepleaseа зачем нужен capchaNum?
чтобы отобразилось новое изображение.. в большинстве случаев пишут дату/время, но можно и как в этом случае

_______________
AnimeBay - аниме магазин, который Вас не разочарует.
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36233441
killmeplease
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок спасибо
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36236406
Max_Payne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может проще использовать готовый компонет MSCaptcha?
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36236543
killmeplease
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
моя гугло-капча круче
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #36236555
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Капчи надо самому делать, а не использовать чьи-то... . На них на всех уже давно антикапчи имеются.
Только правильно написать капчу - не так просто.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
вопрос по CAPTCHA
    #37443596
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч, скажите, пожалуйста, почемукапча не отображается на картинке?
вместо неё виден альтернативный текст.

Это в MainPage.aspx:
Код: plaintext
1.
2.
3.
4.
5.
<img id="imcapcha" src="Handler1.ashx" alt="captcha" /><input type="button" value="R" onclick="recapcha();" />

var capchaNum =  0 ;
function recapcha(t) {
        document.getElementById('imcapcha').src = 'Handler1.ashx?v=' + (capchaNum++);
}


это в Handler1.ashx.cs:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.SessionState;
using System.Drawing;
using System.Drawing.Imaging;

namespace WebApplication1
{
    public class Handler1 : IHttpHandler, IRequiresSessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.Clear();
            context.Response.CacheControl = "no-cache";
            capcha(context);
            context.Response.End();
        }
	void capcha(HttpContext context)
	{	
		Bitmap b = new Bitmap(50, 26);
		Graphics g = Graphics.FromImage(b);
		Random r = new Random();
		string ss = (r.Next(8999) + 1000).ToString();
		context.Session["scap"] = ss;

		g.DrawString(ss, new Font("Courier New", 12), Brushes.Green, new PointF(2, 2));

		context.Response.ContentType = "image/gif";
		b.Save(context.Response.OutputStream, ImageFormat.Gif);
	}
        public bool IsReusable { get { return false; } }
    }
}
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #37443648
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда только учился писать на аспнет, написал такую капчу:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
<%@ Page Language="C#" %>
<%@ import Namespace="System.Drawing" %>
<%@ import Namespace="System.Drawing.Imaging" %>
<%@ import Namespace="System.Drawing.Drawing2D" %>
<script runat="server">

private void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "image/jpeg";
Response.Clear();
Response.BufferOutput = true;
Font[] f = new Font[7];
f[0] = new Font(
"Arial", 18, FontStyle.Italic);
f[1] = new Font(
"Arial", 18, FontStyle.Bold);
f[2] = new Font(
"Arial", 16, FontStyle.Regular);
f[3] = new Font(
"Arial", 20, FontStyle.Strikeout);
f[4] = new Font(
"Verdana", 20, FontStyle.Italic);
f[5] = new Font(
"Verdana", 18, FontStyle.Strikeout);
f[6] = new Font(
"Verdana", 20, FontStyle.Strikeout);    

int height = 90;
int width = 180;
int hh = 50;
int ww = 40;
int inc = 20;
int r1;
int txt1;
int f1;
string letters="";
Random r = new Random();
Color c = Color.FromArgb(0xc8, 0xe0, 0xd8);
Bitmap bmp = new Bitmap(
width, height, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.Clear(c);
for (int i = 0; i < 7; i++)
{
    r1 = r.Next(-10, 10);
    txt1 = r.Next(0, 10);
    f1 = r.Next(0, 7);
    Bitmap bmp1 = new Bitmap(
    ww, hh, PixelFormat.Format32bppArgb);
    Graphics g1 = Graphics.FromImage(bmp1);
    g1.SmoothingMode = SmoothingMode.AntiAlias;
    g1.Clear(Color.Transparent);
    g1.RotateTransform(r1);
    g1.DrawString("  "+txt1.ToString()+"  ", f[f1],
    SystemBrushes.WindowText, new PointF(0, 7));
    letters = letters + txt1.ToString();
    g.DrawImage(bmp1, 20 * i, 15);
    bmp1.Dispose();
    g1.Dispose();
}
Session.Add("letters", letters);
bmp.Save(Response.OutputStream, ImageFormat.Jpeg);
g.Dispose();
bmp.Dispose();
Response.Flush();
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title></title>
</head>
<body>
    <form id="Form1" runat="server">
    </form>
</body>
</html>

Понятное дело, что надо было хендлером воспользоваться. Но, ребята, которые у меня в конторе раскритиковали сам алгоритм, короче, написали антикапчу.
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #37443666
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge, спасибо за код.
Как я понял вы всё делали внутри скрипта, т.е. на клиенте (в браузере).
Но ведь тогда можно будет поймать этот код каптчи.
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #37443682
няка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StudentsShSerge, спасибо за код.
Как я понял вы всё делали внутри скрипта, т.е. на клиенте (в браузере).
Но ведь тогда можно будет поймать этот код каптчи.

мдя, хочешь плач, а хочешь смейся
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #37443687
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Students,

Это не на клиенте и не в браузере. Так иногда можно писать. Вообще-то, всё, что там написано на сишарпе, можно перенести в код. Это так написано, чтобы лишних файлов не делать.
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #37443699
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StudentsКак я понял вы всё делали внутри скрипта, т.е. на клиенте (в браузере)
ShSerge
Код: plaintext
<script runat=">>>server<<<">
...
Рейтинг: 0 / 0
вопрос по CAPTCHA
    #37443701
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, этот предпросмотр когда-нибудь починят?
Пошел жаловаться...
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / вопрос по CAPTCHA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]