Yii рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреИрдкреНрдЪрд╛ рдХреА рдХрдореА рдереАред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреИрдкреНрдЪрд╛ рдиреЗ рдореБрдЭреЗ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╕реВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛:
- рд▓рдЧрд╛рддрд╛рд░ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА (рдмрд╕ F5 рджрдмрд╛рддреЗ рд╣реБрдП рдХрднреА-рдХрднреА рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛, рдХрднреА-рдХрднреА рдПрдХ рдЦрд╛рд▓реА рддрд╕реНрд╡реАрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рдереА, рдХрднреА-рдХрднреА рдПрдХ рдкрд╣рд▓реЗ рдкреНрд░рддреАрдХ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╕реНрд╡реАрд░);
- рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореБрдЭреЗ рдЦреБрдж рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рд▓рдЧ рд░рд╣рд╛ рдерд╛ (+ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝реЙрдиреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ);
- рдЬрдм рдкреГрд╖реНрда рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рддреЛ рдЫрд╡рд┐ рдореЗрдВ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
Googling, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдореИрдВ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рдерд╛ред рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рднреА "рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ" - рдЗрд╕реЗ рдЙрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдлрд┐рдЯ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдерд╛ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЬрд╝рд░реВрд░рдд рдереА (рдпрд╛ рдореБрдЭреЗ рдЕрднреА рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛)ред
рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ KCAPTCHA рдХреИрдкреНрдЪрд╛ (http://captcha.ru/kcaptcha/) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ Yii рдФрд░ KCAPTCHA рд╕реЗ рдореМрдЬреВрджрд╛ рдХреИрдкреНрдЪрд╛ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдФрд░ рдпрд╣рд╛рдБ рдореБрдЭреЗ рдХреНрдпрд╛ рдорд┐рд▓рд╛ -
glavweb.ru/public/download/kcaptcha.zipрдХреИрдкреНрдЪрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣рд╛рдВ
glavweb.ru/public/download/kcaptcha.zip рд╕реЗ рдЦреБрдж рдкрд░ рдПрдХ рдХреИрдкреНрдЪрд╛ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЕрдкрдиреЗ Yii рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ "рд╕рдВрд░рдХреНрд╖рд┐рдд / рдПрдХреНрд╕рдЯреЗрдВрд╢рди" рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддрд╛рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдВрд░рдЪрдирд╛ рд╣реЛ:
protected/
extensions/
kcaptcha/
fonts/
KCaptchaAction.php
рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдХреИрдкреНрдЪрд╛ рд╡рд┐рдЬреЗрдЯ рдФрд░ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдорд╛рдирдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдХреИрдкреНрдЪрд╛ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рд╡реНрдпрдВрдЬрдиреЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ -http: //www.yiiframework.ru/doc/cbook/ru/form.captchaред рдкрд░рд┐рд╡рд░реНрддрди рдХреЗрд╡рд▓ рдирд┐рдпрдВрддреНрд░рдХ рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬреЛрдбрд╝реЗрдВ:
public function actions()
{
return array(
'captcha'=>array(
'class' => 'application.extensions.kcaptcha.KCaptchaAction',
'maxLength' => 6,
'minLength' => 5,
'foreColor' => array(mt_rand(0, 100), mt_rand(0, 100),mt_rand(0, 100)),
'backColor' => array(mt_rand(200, 210), mt_rand(210, 220),mt_rand(220, 230))
)
);
}
рд╕рдВрднрд╛рд╡рд┐рдд рдХреИрдкреНрдЪрд╛ рд╡рд┐рдХрд▓реНрдк
рд╡рд░реНрдгрдорд╛рд▓рд╛ - рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рд╡рд░реНрдгрдорд╛рд▓рд╛ ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ "0123456789abcdefghijklmnopqrstuvwxyz" рд╣реИред рдлрд╝реЙрдиреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рди рдмрджрд▓реЗрдВред
allowSymbols - рдкреНрд░рддреАрдХ рдЪрд┐рдиреНрд╣ рдХреИрдкреНрдЪрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗ, рд╕рдорд╛рди рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ (o => 0, 1 => l, i => j, t => f)ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ 23456789abdedekmkmnpqsuvxyz рд╣реИред
рдЪреМрдбрд╝рд╛рдИ - рдХреИрдкреНрдЪрд╛ рдХреА рдЪреМрдбрд╝рд╛рдИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 120 рд╣реИред рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╖реНрдЯрддрдо рд╣реИрдВред
рдКрдБрдЪрд╛рдИ - рдХреИрдкреНрдЪрд╛ рдХреА рдКрдБрдЪрд╛рдИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 60 рд╣реИред рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╖реНрдЯрддрдо рд╣реИрдВред
minLength - рдХреИрдкреНрдЪрд╛ рд╡рд░реНрдгреЛрдВ рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ 6 рд╣реИред
maxLength - рдХреИрдкреНрдЪрд╛ рд╡рд░реНрдгреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ 7 рд╣реИред
fluctuationAmplitude - 2. рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдкреНрд░рддреАрдХ рдХреЗ рджреЛрд▓рди рдХреЗ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдЖрдпрд╛рдо, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 5 рд╣реИред
noSpaces - рд╡рд░реНрдгреЛрдВ рдХреЗ рдмреАрдЪ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд░реЛрдХреЗрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рддреНрдп рд╣реИред
рдЕрдЧреНрд░рд▓реЗрдЦ - рдЖрд░рдЬреАрдмреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреИрдкреНрдЪрд╛ рдкрд╛рда рдХрд╛ рд░рдВрдЧред рдПрдХ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рддреЛ рдПрдХ рд╕рд░рдгреА рдпрд╛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИред
backColor - RGB рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдХреИрдкреНрдЪрд╛ рдХрд╛ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдХрд▓рд░ред рдПрдХ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рддреЛ рдПрдХ рд╕рд░рдгреА рдпрд╛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ
testLimit - рдПрдХ рд╣реА рдХреИрдкреНрдЪрд╛ рдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЗрд╕рдХрд╛ рдорд╛рдиред рдпрд╣ рдХреЗрд╡рд▓ рдЧрд▓рдд рдХреИрдкреНрдЪрд╛ рдЗрдирдкреБрдЯ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рд╕рд╛рдзрд╛рд░рдг рд░рд┐рдлреНрд░реЗрд╢ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ 3 рд╣реИред
рдлрд┐рдХреНрд╕реНрдб
рд╡реЗрд░рд┐рдлрд╛рдЗрдХреЛрдб - рдлрд┐рдХреНрд╕реНрдб рд╡реЗрд░рд┐рдлрд┐рдХреЗрд╢рди рдХреЛрдбред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдЙрд╕реА рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрд╢рдХреНрдд рд╣реИред
FontDir - рдлрд╝реЙрдиреНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрдеред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╢реВрдиреНрдп рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдлреЛрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдкреЗрдЬ рд░реАрд▓реЛрдб рдХреЗ рдмрд╛рдж рдЗрдореЗрдЬ рдХреЛрдб рдЕрдкрдбреЗрдЯ
рд▓реЗрдХрд┐рди рдкреЗрдЬ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЫрд╡рд┐ рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдФрд░ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛ред CCaptchaValidator рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдореЗрдВ рдПрдХ рд░реЛрдбрд╝рд╛, рдпрд╛ рдЗрд╕рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдо рд╣рд░ рдмрд╛рд░ рдХреИрдкреНрдЪрд╛ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ js (рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди) рдореЗрдВ, рд╣рдо рдЕрднреА рднреА рдкрд┐рдЫрд▓реА рдЫрд╡рд┐ рд╕реЗ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреЗрдЬ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрдореЗрдЬ рдХреЗ рд▓рд┐рдП рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдЬрд╛рддреА рд╣реИред рдпрд╛рдиреА рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, js рдХреЛрдб рдореЗрдВ, рд╣рдо рд╕рддреНрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдЫрд╡рд┐ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдПрдХ рдЕрдиреБрд░реЛрдз <img> рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рддреНрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЫрд╡рд┐ рдХрд╛ рдХреЛрдб js рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ (рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ js рдореЗрдВ рдпрд╣ рдЫрд╡рд┐ рдХреЛрдб рд╣реА рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХрд╛ рд╣реИрд╢ рд╣реИ) )ред
рдпрд╣рд╛рдБ рд╕рдорд╛рдзрд╛рди рдпрд╛ рддреЛ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ рдФрд░ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реИ рдЬрдм js ($ captcha-> getVerifyCode (true)) рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рд╕рддреНрд░ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╣рдЯрд╛ рджреЗрдВ рдЬреЛ рдХреИрдкреНрдЪрд╛ рдлрд╝реЙрд░реНрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:
// Refresh captcha
Yii::import('application.extensions.kcaptcha.KCaptchaAction');
Yii::app()->session->remove(KCaptchaAction::SESSION_KEY);