Web design and hosting, database, cloud and social media solutions that deliver business results
  • рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди
    • рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░
    • рд░реЛрдмреЛрдЯрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рди
    • рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░рд╛рдорд░реНрд╢ рд╕реЗрд╡рд╛рдПрдВ
      • рдбреЗрдЯрд╛ рдПрдХреАрдХрд░рдг
      • рдбрд╛рдЯрд╛рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рд╕реЗрд╡рд╛рдПрдВ
      • рдкрд╛рд╡рд░ рдмреАрдЖрдИ
      • рд╕рд░реНрд╡рд░ рдЕрдкрдЧреНрд░реЗрдб рдФрд░ рдбреАрдмреАрдП рд╕реЗрд╡рд╛рдПрдВ
    • рд╡реЗрдм рд╕рд╛рдЗрдЯ рдбрд┐рдЬрд╛рдЗрди
      • рднреБрдЧрддрд╛рди рджреНрд╡рд╛рд░
      • рд▓реЛрдЧреЛ рдбрд┐рдЬрд╛рдЗрди
      • рд╡реЗрдм рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдФрд░ рдЕрдиреБрд╡рд╛рдж
      • рд╡реЗрдм рд╕рд╛рдЗрдЯ рдЕрдиреБрдХреВрд▓рди
      • рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реБрд░рдХреНрд╖рд╛
      • рддрдХрдиреАрдХреА рдЙрдкрдХрд░рдг
    • рдХреНрд▓рд╛рдЙрдб рд╕рдорд╛рдзрд╛рди
      • рдЕрдореЗрдЬрд╝рди рд╡реЗрдм рд╕реЗрд╡рд╛рдПрдБ
      • Google рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛рдПрдВ
      • рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдРрдЬрд╝реБрд░
    • рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдСрдлрд┐рд╕
    • рд╕рд╛рдорд╛рдЬрд┐рдХ рдореАрдбрд┐рдпрд╛
  • рдЕрдХрд╛рджрдореА
    • рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг
    • рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╛рдЗрди рд╕реАрдЦрдирд╛
      • рдореВрд▓ рдмрд╛рддреЗрдВ
      • SQL рд╕рд░реНрд╡рд░ Pivot-Unpivot рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
      • SQL рд╕рд░реНрд╡рд░ рдбреЗрдЯрд╛
      • SQL рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
      • рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ 2008 рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЬрдирд╛рдПрдБ
      • рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ рддрд┐рдерд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
      • рдУрдкрди рдХреНрд╡реЗрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
    • рд╡реЗрдмрд╕рд╛рдЗрдЯ рдбрд┐рдЬрд╛рдЗрди рд╕реАрдЦрдирд╛
      • Ousia рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг
      • ASP-NET
      • CSS
      • рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
    • рдХреНрд▓рд╛рдЙрдб рдФрд░ рдЖрдИрдЯреА рд╕реЗрд╡рд╛рдПрдВ рд╕реАрдЦрдирд╛
      • рдЯрд╛рд╕реНрдХ рд╢реЗрдбреНрдпреВрд▓рд░ рддреНрд░реБрдЯрд┐ 2147943645
      • рдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдФрд░ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рд╕рд░рд▓ рдЪрд░рдгреЛрдВ рдореЗрдВ рдкреАрдПрдлрдПрдХреНрд╕ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛
    • рд╕рд╛рдорд╛рдЬрд┐рдХ рдореАрдбрд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ
      • Google рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдирд╛
      • рдлреЗрд╕рдмреБрдХ рдЕрдХрд╛рдЙрдВрдЯ рдХреЛ рдкрд░реНрд╕рдирд▓ рд╕реЗ рдмрд┐рдЬрдиреЗрд╕ рдореЗрдВ рдмрджрд▓рдирд╛
      • рд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рдЫрд╡рд┐ рдЖрдХрд╛рд░
      • рд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рдЫрд╡рд┐рдпрд╛рдБ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдЯрд╛ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
      • рд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рдкреНрд░рдпрд╛рд╕реЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕реНрдерд╛рди рдЪреБрдирдирд╛
  • рд╣рдорд╛рд░реЗ рдмрд╛рд░реЗ рдореЗрдВ
    • рдмреНрд▓реЙрдЧ
      • Google рдХреЛрд░ рдЕрдкрдбреЗрдЯ рдЬрдирд╡рд░реА 2020
      • рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЪреБрдирд╛рд╡ рдХреИрд╕реЗ рдХрд░реЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкрддреНрд░рдХ
      • рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдХрд╖реНрдЯрдкреНрд░рдж рдмрд╛рддреЗрдВ
      • рдПрдХ рдкреНрд░рд╡реЗрд╢ рд╕реНрддрд░ рдХреА рдЧреЗрдорд┐рдВрдЧ рдорд╢реАрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг
      • рдСрдирд▓рд╛рдЗрди рдШреЛрдЯрд╛рд▓реЗ рдХреЛ рд░реЛрдХрдирд╛
      • рдЧрд┐рдЧ рдЗрдХреЙрдирдореА рдХреЗ рд╕реНрдХрд┐рдорд░реНрд╕
      • рдореБрдлреНрдд рд╡реЗрдХреНрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ 5 рд╡реЗрдмрд╕рд╛рдЗрдЯреЗрдВ
      • рдЧрд░реНрдо рдорд┐рд░реНрдЪ рдЗрдВрдЯрд░рдиреЗрдЯ рдмрдВрдж
    • рдХрд░рд┐рдпрд░
      • рдЕрдиреБрд╡рд╛рджрдХ рдЕрдВрдЧреНрд░реЗрдЬрд╝реА-рдЬрд╛рдкрд╛рдиреА
      • рдЕрдиреБрд╡рд╛рджрдХ рдЕрдВрдЧреНрд░реЗрдЬрд╝реА-рддреБрд░реНрдХреА
      • рдЕрдиреБрд╡рд╛рджрдХ рдЕрдВрдЧреНрд░реЗрдЬрд╝реА-рдкреБрд░реНрддрдЧрд╛рд▓реА
      • рдЕрдиреБрд╡рд╛рджрдХ рдЕрдВрдЧреНрд░реЗрдЬрд╝реА-рд╕реНрдкреЗрдирд┐рд╢
    • рдЯреАрдо
      • рдЕрд▓реА рдЕрд▓ рдЕрдореАрди
      • рдРрд╕реЗ рд╣реБрд░реЛ
      • рдПрдбреНрд░рд┐рдпрди рдЖрдирдВрджрди
      • рдЧреЗрд╡рд┐рди рдХреНрд▓реЗрдЯрди
      • рдЪреЗрд╕реНрдЯрд░ рдХреЙрдкрд░рдкреЙрдЯ
      • рд╕реБрдиреАрд▓ рдХреБрдорд╛рд░
      • рд╕реВрд░реНрдп рдореБрдХреНрдХрдорд▓
      • рд╕рд╛рдИ рдЧрдВрдЧреВ
    • рдирд┐рдпрд╛рдордХ
    • рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ
English (EN-US)English (EN-GB)рд╣рд┐рдВрджреА (HI)italiano (IT)цЧецЬмшкЮ (JA)Portugu├кs (PT)

.NET . рдореЗрдВ рдХреИрдкреНрдЪрд╛ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг

рдкреВрд░реНрд╡рд╛рднреНрдпрд╛рд╕: рдЕрд╡рд╛рдВрдЫрд┐рдд рдореЗрд╣рдорд╛рдиреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ASP.NET рдореЗрдВ рдХреИрдкреНрдЪрд╛ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
If you want to run through this walkthrough, please follow the guide on setting up our test environment.

Experience Level - Intermediate

Captcha Image

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрдкреНрдЪрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЕрд╡рд╛рдВрдЫрд┐рдд рдореЗрд╣рдорд╛рдиреЛрдВ рдпрд╛ рдмреЙрдЯреНрд╕ рдХреА рднреАрдбрд╝ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд░рд╣реА рд╣реИ?

рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ, рдпрд╣ рд╕рдмрд╕реЗ рд╡рд┐рд╕реНрддреГрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛, рдФрд░ рдПрдХ рд╣рдореЗрд╢рд╛ рдмрджрд▓рддреЗ рдкрд░рд┐рдгрд╛рдо рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛

рдЗрд╕реЗ VB.NET рдФрд░ MVC рдкреЗрдЬ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде SQL рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рднреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП SQL рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдЪреНрдЪ рдЙрдкрдпреЛрдЧ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ GUID рдкрд░ рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

Create Table

CREATE TABLE [dbo].[captcha]([captchaGUID] [varchar](36) NOT NULL,[captchaValue] [varchar](10) NULL,[captchaDateAdded] [datetime] NULL,[captchaDateGuessed] [datetime] NULL)

рдПрдХ рд╕реЗрд╡рд╛ рдкреГрд╖реНрда рдЬреЛрдбрд╝реЗрдВ

рдЖрдЧреЗ рд╣рдо рдПрдХ рд░реИрдВрдбрдо рд▓реЗрдЯрд░ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрдВрдХреНрд╢рди рдмрдирд╛рдПрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдиреАрдЪреЗ рдХреА рдУрд░ рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдб рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░ рджреЗрдЧрд╛, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрддреНрдкрдиреНрди рдорд╛рди рд╣рдореЗрд╢рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рдВрдмрд╛рдИ рдХреЗ рд╣реЛрдВрдЧреЗред

рд╣рдо рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ 40 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ 5 рдореЗрдВ рд╕реЗ рдПрдХ рдореМрдХрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ (32 рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде) рдПрдХ рдЦрд╛рд▓реА рдорд╛рди рд▓реМрдЯрд╛рддреА рд╣реИред

Random Letter Function

CREATE FUNCTION [dbo].[GetLetter](@MyInt INT) RETURNS VARCHAR(1) AS BEGINRETURN (SELECT REPLACE(SUBSTRING('ABCDEFGHJKMNPQRTUVQXYZ0123456789', @MyInt,1),'_',''))ENDGOSELECT dbo.GetLetter(ROUND(RAND()*40,0))

рдПрдХ рд╕реЗрд╡рд╛ рдкреГрд╖реНрда рдЬреЛрдбрд╝реЗрдВ

рдЕрдм рд╣рдо рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╡реЗрдм рд╕рд╛рдЗрдЯ рдкрд░ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВрдЧреЗ, рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рднреА рд╣реИ рдЬрд╣рд╛рдВ рдХреИрдкреНрдЪрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдХреЛрдб рдореЗрдВ рдЙрдиреНрд╣реЗрдВ 30 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж рдбрд┐рд▓реАрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ 10 рдмрд╛рд░ рд╕реЗ рдКрдкрд░ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдкреБрд░рд╛рдиреЗ рдЕрдиреБрдорд╛рдирд┐рдд рдорд╛рдиреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред

Stored Procedure

CREATE PROC [dbo].[NewCaptchaValue] AS BEGINWHILE (SELECT COUNT(*) FROM captcha WHERE captchaDateGuessed IS NULL)<150BEGIN
INSERT INTO captcha(captchaGUID,captchaValue,captchaDateAdded)SELECT NEWID(),dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0)),GETDATE()ENDDELETE FROM captcha WHERE captchaDateGuessed<DATEADD(MINUTE,-30,GETDATE())DECLARE @Newcaptcha VARCHAR(36)=(SELECT TOP 1 captchaGUID FROM captcha WHERE captchaDateGuessed IS NULL)SELECT @NewcaptchaEND

рдПрдХ рд╕реЗрд╡рд╛ рдкреГрд╖реНрда рдЬреЛрдбрд╝реЗрдВ

рдЕрдм рд╣рдореЗрдВ рдПрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рднреЗрдЬрддреА рд╣реИ, рдФрд░ рдорд╛рди рд╕рд╣реА рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

рдореИрдВрдиреЗ рдкрд╛рд╕/рдлреЗрд▓ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

Stored Procedure

CREATE PROC [dbo].[CaptchaValue](@captchaGUID VARCHAR(36),@captchaValue VARCHAR(10)) AS BEGINDECLARE @CaptchaValueDB VARCHAR(10)=(SELECT captchaValue FROM captcha WHERE captchaGUID=@captchaGUID)DECLARE @Newcaptcha VARCHAR(36)UPDATE captcha SET captchaDateGuessed=GETDATE() WHERE captchaGUID=@captchaGUIDIF @captchaValue=@CaptchaValueDBBEGINSET @Newcaptcha='Pass'ENDIF @captchaValue<>@CaptchaValueDB OR @CaptchaValueDB IS NULLBEGINSET @Newcaptcha='Fail'ENDSELECT @NewcaptchaEND

рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЕрдХрд╛рджрдореА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ

CS_1_Add_AppCode.png

рдпрд╣рд╛рдВ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрджрдо

  • рдпрджрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ App_Code рдлрд╝реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝реЗрдВ
  • App_Code рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рджрд╛рдпрд╛рдБ рдорд╛рдЙрд╕ рдмрдЯрди рдФрд░ Add>Class . рдЪреБрдиреЗрдВ
  • рдПрдХ рдкреЙрдк-рдЕрдк рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ Captcha.vb рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ

рдЗрд╕ рдирдП рдЖрдЗрдЯрдо рдкрд░ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЧреБрдг рдЪреБрдиреЗрдВред

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдХреЗ рдКрдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝реЗрдВ;

Imports System.Drawing

рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЕрдХрд╛рджрдореА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ

рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ рдХреЛрдб рдЫрд╡рд┐ рдмреЙрдХреНрд╕ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рд╕реЗ рдЦреАрдВрдЪреА рдЧрдИ рд░реЗрдЦрд╛рдУрдВ рдХреА рджреВрд░реА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдХрд╛рд░реНрдп рд╣реИрдВред рдЗрд╕реЗ рдХрдХреНрд╖рд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
    Private Shared Function GenerateLineNumberY() As Integer        Dim ret As New Integer        ret = (6 * Right((Rnd() * Rnd() * Rnd()), 1)) + 2        Return ret    End Function    Private Shared Function GenerateLineNumberX() As Integer        Dim ret As New Integer        ret = (6 * Right((Rnd() * Rnd() * Rnd()), 1)) + 2        Return ret    End Function

рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЕрдХрд╛рджрдореА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ

рдЕрдм рдкрд╛рда рдХреЗ рд▓рд┐рдП рджреЛ рдХрд╛рд░реНрдп рд╣реИрдВ, рдкрд╣рд▓рд╛ рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рдмреАрдЪ рд░рд┐рдХреНрддрд┐ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдКрдкрд░ рд╕реЗ рдКрдБрдЪрд╛рдИ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдХреНрд╖рд░ рдЦреАрдВрдЪреЗрдЧрд╛ред
    Private Shared Function GenerateLineNumberSpace() As Integer        Dim ret As New Integer        ret = (Right(Rnd(), 1)) + 13        Return ret    End Function    Private Shared Function GenerateLineNumberHeight() As Integer        Dim ret As New Integer        ret = (2 * Right((Rnd() * Rnd() * Rnd()), 1)) + 1        Return ret    End Function

рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЕрдХрд╛рджрдореА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреЗрди рдФрд░ рдмреНрд░рд╢ рд░рдВрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫрд╡рд┐ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд┐рдо рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВред
    Private Shared Function GenerateRandomPenColor() As System.Drawing.Pen        Dim mypen As New Pen(Brushes.Cyan)        Dim ret As New Integer        ret = Right((Rnd() * Rnd() * Rnd()), 1)        Select Case ret            Case 5, 0, 1                mypen.Color = Color.DarkGray            Case 6, 2                mypen.Color = Color.DarkRed            Case 7, 3, 9                mypen.Color = Color.DarkOliveGreen            Case 8, 4                mypen.Color = Color.DarkOrange        End Select        Return mypen    End Function    Private Shared Function GenerateRandomBrushColor() As System.Drawing.SolidBrush        Dim myBrush As New SolidBrush(Color.Aqua)        Dim ret As New Integer        ret = Right((Rnd() * Rnd() * Rnd()), 1)        Select Case ret            Case 5, 0, 1                myBrush.Color = Color.DarkGray            Case 6, 2                myBrush.Color = Color.DarkRed            Case 7, 3, 9                myBrush.Color = Color.DarkOliveGreen            Case 8, 4                myBrush.Color = Color.DarkOrange        End Select        Return myBrush    End Function    Public Shared Function GenerateCaptcha(CaptchaString As String) As Bitmap        Dim Height As Integer = 60        Dim Width As Integer = 300        Dim objBitmap As Bitmap        Dim objGraphics As Graphics
        Dim oPoint As New PointF        objBitmap = New Bitmap(Width, Height)        objGraphics = Graphics.FromImage(objBitmap)        'Draw Background        objGraphics.FillRectangle(Brushes.White, 0, 0, Width, Height)        objGraphics.DrawRectangle(Pens.Black, 0, 0, Width - 2, Height - 2)        'Draw Text        Dim oFont As New Font("Arial", 20)        Dim spac As Integer = 5        Dim stringInt As Integer = 1        While stringInt <= CaptchaString.Length            spac = spac + GenerateLineNumberSpace()            oPoint = New PointF(spac, GenerateLineNumberHeight)            objGraphics.DrawString(Mid(CaptchaString, stringInt, 1), oFont, GenerateRandomBrushColor, oPoint)            stringInt = stringInt + 1        End While        'White Lines        objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY())        objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY())        objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY())        objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY())        objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY())        objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY())        objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY())        objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY())        objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY())        'Draw Lines        objGraphics.DrawLine(GenerateRandomPenColor, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY())        objGraphics.DrawLine(GenerateRandomPenColor, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY())
        objGraphics.DrawRectangle(Pens.Black, 0, 0, Width - 2, Height - 2)
        Return objBitmap    End Function
рдЖрдЗрдП рдЕрдм рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЪрд░рдг рдореЗрдВ Global.asax рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд░реВрдЯ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирдпрд╛ рдорд╛рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВред

рдЙрдк RegisterRoutes рдЦреЛрдЬреЗрдВ рдФрд░ рдЕрдВрджрд░ рдПрдХ рдирдпрд╛ рдорд╛рд░реНрдЧ (Routes.MapPageRoute) рдЬреЛрдбрд╝реЗрдВред

    Sub RegisterRoutes(ByVal Routes As RouteCollection)        Routes.MapPageRoute("Captcha", "Captcha/{GUID}", "~/Data/Images/CaptchaService.aspx")    End Sub

рдПрдХ рд╕реЗрд╡рд╛ рдкреГрд╖реНрда рдЬреЛрдбрд╝реЗрдВ

рдЕрдм рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓реМрдЯрд╛рдИ рдЧрдИ рдЫрд╡рд┐ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдбреЗрдЯрд╛ рдФрд░ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред

рдбреЗрдЯрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;

  • ClaytabaseAcademy рдкрд░ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ Add>New Folder рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдлреЛрд▓реНрдбрд░ рдХреЛ рдбреЗрдЯрд╛ рдирд╛рдо рджреЗрдВред
  • рдЕрдм рдЗрдореЗрдЬреЗрдЬ рдирд╛рдордХ рдПрдХ рдЕрдиреНрдп рдлреЛрд▓реНрдбрд░ рдХреЛ рдбреЗрдЯрд╛ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
  • рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрдореЗрдЬ рдлреЛрд▓реНрдбрд░ рдореЗрдВ CaptchaService.aspx рдирд╛рдордХ рд╡реЗрдмрдлреЙрд░реНрдо рдЬреЛрдбрд╝реЗрдВ

рдпрд╣ рдкреЗрдЬ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рд░реВрдЯ рд╣реИрдВрдбрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

Replace Code

Imports System.Data.SqlClientImports ClaytabaseAcademy.GlobalVariablesImports ClaytabaseAcademy.CaptchaImports System.DrawingImports System.Drawing.ImagingPublic Class CaptchaService    Inherits System.Web.UI.Page    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load        Dim captchaguid As String = RouteData.Values("GUID").ToString        Dim con As New SqlConnection(ConStr)        Dim com As New SqlCommand("SELECT captchaValue FROM captcha WHERE captchaGUID='" + captchaguid + "'", con)        con.Open()        Dim CaptchaBitmap As Bitmap = GenerateCaptcha(com.ExecuteScalar)        con.Close()        Response.ClearContent()        Response.ContentType = "image/bmp"        CaptchaBitmap.Save(Response.OutputStream, ImageFormat.Gif)    End SubEnd Class

рдПрдХ рд╕реЗрд╡рд╛ рдкреГрд╖реНрда рдЬреЛрдбрд╝реЗрдВ

рдХреНрд▓реЗрдЯрд╛рдмреЗрд╕ рдЕрдХрд╛рджрдореА рдкрд░ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ рдкреЗрдЬ рдирд╛рдордХ рдПрдХ рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдФрд░> рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝реЗрдВ

CaptchaView рдирд╛рдордХ рдПрдХ рдирдпрд╛ рд╡реЗрдм рдлреЙрд░реНрдо рдЬреЛрдбрд╝реЗрдВ

рдПрдХ рдирдпрд╛ рд╡реЗрдм рдкреЗрдЬ рдмрдирд╛рдПрдВ, рдФрд░ рдПрдХ рдЗрдореЗрдЬ рдХрдВрдЯреНрд░реЛрд▓, рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕, рдмрдЯрди, рд╣рд┐рдбрдирдлреАрд▓реНрдб рдФрд░ рдПрдХ рд▓реЗрдмрд▓ рдореЗрдВ рдЦреАрдВрдЪреЗрдВ рдпрд╛ рдкреЗрдЬ рдХреЗ рдмреЙрдбреА (рдПрдЪрдЯреАрдПрдордПрд▓ рдкрд╛рд░реНрдЯ) рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВред
<body>    <form id="form1" runat="server" style="margin:100px auto;width:300px;padding:10px;background-color:#fff;box-shadow:0 0 3px 0 #222;border-radius: 8px;">        <div style="text-align:center;">            <asp:Image ID="CaptchaImage" runat="server" />        </div>        <div style="text-align:center;">            <asp:TextBox ID="captchaEntered" runat="server"></asp:TextBox>        </div>        <div style="text-align:center;">            <asp:Button ID="captchaSubmit" runat="server" Text="Submit" style="margin:5px auto"/>            <asp:HiddenField ID="captchaGuid" runat="server" />        </div>        <div style="text-align:center;">            <asp:Label ID="captchaResult" runat="server" Text=""></asp:Label>        </div>    </form></body>

рдЕрдВрддрд┐рдо рдЪрд░рдг рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкреАрдЫреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ (рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ> рдХреЛрдб рджреЗрдЦреЗрдВ) рдФрд░ рдкреАрдЫреЗ рдХреЗ рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдиреАрдЪреЗ рд╣реИред

рдпрд╣ рдПрдХ рдЙрдк рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдкреЗрдЬ рд▓реЛрдб рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЧрдП рдмрдЯрди рдХреЗ рдХреНрд▓рд┐рдХ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред

Imports System.Data.SqlClientImports ClaytabaseAcademy.GlobalVariablesPublic Class CaptchaView    Inherits System.Web.UI.Page    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load        If Not IsPostBack Then            Using con As New SqlConnection(ConStr)                Using com As New SqlCommand("EXEC dbo.NewCaptchaValue", con)                    con.Open()                    Dim Captcha As String = com.ExecuteScalar                    captchaGuid.Value = Captcha                    CaptchaImage.ImageUrl = "/Captcha/" + Captcha                End Using            End Using        End If    End Sub    Protected Sub GetCaptcha(sender As Object, e As EventArgs) Handles captchaSubmit.Click        If IsPostBack Then            Using con As New SqlConnection(ConStr)                Dim valStr As String = Replace(captchaEntered.Text, "'", "''")                Dim valGUID As String = Replace(captchaGuid.Value, "'", "''")                Response.Write("valStr: " + valStr + "<br>")                Response.Write("valGUID: " + valGUID + "<br>")                Using com As New SqlCommand("EXEC CaptchaValue '" & valGUID & "','" & valStr & "'", con)                    con.Open()                    Dim res As String = com.ExecuteScalar()                    captchaResult.Text = res                End Using                Response.Write("EXEC CaptchaValue '" & valGUID & "','" & valStr & "'")            End Using        End If    End SubEnd Class

Test that it has worked by select Build > Build Solution from the Top Menu

You should now be able to test this in a number of ways;

  • Click on Debug when on the relevant page
  • Right Mouse button on the item within the project explorer and selecting View in Browser
  • Right Mouse button on the page and select View in Browser

Helpful?

Please note, this commenting system is still in final testing.

Author

рдХреНрд▓реЗрдЯрд╛рдмреЗрд╕ рджреНрд╡рд╛рд░рд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдбрд┐рдЬрд╛рдЗрди

рдпрд╣ рдХреЛрдб рдХрд╛ рдПрдХ рднрд╛рдЧ рд╣реИ рдЬрд┐рд╕реЗ Ousia рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдХреЛрдб рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдмрд╛рдЬрд╛рд░ рдкрд░ рд╕рдмрд╕реЗ рддреЗрдЬ рдФрд░ рд╕рдмрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдбрд┐рдЬрд╛рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

рдпреЗ рд▓рдЧрднрдЧ ┬г500 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдЕрдзрд┐рдХ: рдЙрддреНрддрд░рджрд╛рдпреА рдФрд░ рддреЗрдЬред рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рд╡реЗрдм рд╡рд┐рдХрд╛рд╕, рдбрд┐рдЬрд╛рдЗрди рдФрд░ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ
Copyright Claytabase Ltd 2020

Registered in England and Wales 08985867

RSSLoginLink рдХреВрдХреА рдиреАрддрд┐рд╕рд╛рдЗрдЯрдореИрдк

Social Media

facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd

Get in Touch

+442392064871info@claytabase.comClaytabase Ltd, Unit 3d, Rink Road Industrial Estate, PO33 2LT, United Kingdom
рдЗрд╕ рд╕рд╛рдЗрдЯ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рднреА рдХреБрдХреАрдЬрд╝ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рд╣реИрдВ рдЗрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реА рдХреБрдХреА рдиреАрддрд┐ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧ рдкреГрд╖реНрда рдкрд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрдк рдХреБрдХреАрдЬрд╝ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВред
Ousia Logo
Logout
Ousia CMS Loader