> 백엔드 개발 > PHP 튜토리얼 > 分享DEDECMS 验证码的一个细节有关问题。附提问一个疑惑,有关SESSION的

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-06-13 11:07:40
원래의
889명이 탐색했습니다.

分享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 />
로그인 후 복사

解决: 一开始以为是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 />
로그인 후 복사




后来看了验证码方面的获取和销毁的函数,有一个疑问的地方:
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 />
로그인 후 복사


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 />
로그인 후 복사



个人将代码修改成如下,文件/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>
로그인 후 복사
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿