Heim > Backend-Entwicklung > PHP-Tutorial > 分享DEDECMS 验证码的一个细节有关问题。附提问一个疑惑,有关SESSION的

分享DEDECMS 验证码的一个细节有关问题。附提问一个疑惑,有关SESSION的

WBOY
Freigeben: 2016-06-13 12:59:49
Original
1363 Leute haben es durchsucht

分享DEDECMS 验证码的一个细节问题。附提问一个疑惑,有关SESSION的

本帖最后由 default7 于 2012-12-01 15:54:51 编辑
问题:重复提交问题。表单提交成功了,发现页面单击右键点击返回上一页,浏览器提示“此页面不可用”,按下F5重新刷新,结果又提交成功了。导致“如果不停地刷新”就可以不停地提交成功!验证码的问题。
代码:
<br />
if($dopost == 'add'){<br />
  $svali = GetCkVdValue();<br />
  if(strtolower($vdcode)!=$svali || $svali=='')<br />
  {<br />
      ResetVdValue();<br />
      ShowMsg('验证码错误!', '-1');<br />
      exit();<br />
  }<br />
}<br />
Nach dem Login kopieren

解决: 一开始以为是ResetVdValue();这个函数的问题,最后才发现是执行顺序的问题,把 ResetVdValue(); 放到判断“提交的验证码是否正确”的代码之前就可以了。
<br />
if($dopost == 'add'){<br />
  $svali = GetCkVdValue();<br />
  ResetVdValue(); //位置移前<br />
  if(strtolower($vdcode)!=$svali || $svali=='')<br />
  {<br />
      ShowMsg('验证码错误!', '-1');<br />
      exit();<br />
  }<br />
}<br />
Nach dem Login kopieren




后来看了验证码方面的获取和销毁的函数,有一个疑问的地方:
1.未改动前的文件:/include/common.func.php,函数GetCkVdValue()和ResetVdValue()
<br />
/**<br />
 *  获取验证码的session值<br />
 *<br />
 * @return    string<br />
 */<br />
function GetCkVdValue()<br />
{<br />
    @session_id($_COOKIE['PHPSESSID']);<br />
    @session_start();<br />
    return isset($_SESSION['securimage_code_value']) ? $_SESSION['securimage_code_value'] : '';<br />
}<br />
<br />
/**<br />
 *  PHP某些版本有Bug,不能在同一作用域中同时读session并改注销它,因此调用后需执行本函数<br />
 *<br />
 * @return    void<br />
 */<br />
function ResetVdValue()<br />
{<br />
    @session_start();<br />
    $_SESSION['securimage_code_value'] = '';<br />
}<br />
Nach dem Login kopieren


2.未改动前的验证码生成程序:/include/vdimgck.php 开头的地方有写
<br />
$sessSavePath = DEDEDATA."/sessions/";<br />
<br />
// Session保存路径<br />
if(is_writeable($sessSavePath) && is_readable($sessSavePath)){ session_save_path($sessSavePath); }<br />
if(!empty($cfg_domain_cookie)) session_set_cookie_params(0,'/',$cfg_domain_cookie);<br />
<br />
session_start();<br />
Nach dem Login kopieren



个人将代码修改成如下,文件/include/common.func.php
<br>
<br>
/**<br>
 *  获取验证码的session值<br>
 *<br>
 * @return    string<br>
 */<br>
function GetCkVdValue()<br>
{<br>
    $sessSavePath = DEDEDATA."/sessions/";<br>
    if(is_writeable($sessSavePath) && is_readable($sessSavePath)){ session_save_path($sessSavePath); }<br>
    if(!empty($GLOBALS['cfg_domain_cookie'])) session_set_cookie_params(0,'/',$GLOBALS['cfg_domain_cookie']);<br>
<br>
    @session_id($_COOKIE['PHPSESSID']);<br>
    @session_start();<br>
    return isset($_SESSION['securimage_code_value']) ? $_SESSION['securimage_code_value'] : '';<br>
}<br>
<br>
/**<br>
 *  PHP某些版本有Bug,不能在同一作用域中同时读session并改注销它,因此调用后需执行本函数<br>
 *<br>
 * @return    void<br>
 */<br>
function ResetVdValue()<br>
{<br>
    $sessSavePath = DEDEDATA."/sessions/";<br>
    if(is_writeable($sessSavePath) && is_readable($sessSavePath)){ session_save_path($sessSavePath); } <div class="clear">
                 
              
              
        
            </div>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage