DEDECMS 検証コードの詳細を共有します。 SESSION に関する質問を添付します
この投稿はデフォルトで 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 />
ログイン後にコピー
私は個人的にコードを次のように変更しました。 file/include/common.func.php
<br>
<br>
/**<br>
* 認証コードのセッション値を取得<br>
*<br>
* @戻り文字列<br>
*/<br>
関数 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>
isset($_SESSION['securimage_code_value']) $_SESSION['securimage_code_value'] : '';<br> を返します。
}<br>
<br>
/**<br>
* PHP のバージョンによってはバグがあるため、同じスコープ内でセッションの読み取りとログアウトを同時に行うことができないため、この関数を呼び出した後にこの関数を実行する必要があります。
*<br>
* @return void<br>
*/<br>
関数 ResetVdValue()<br>
{<br>
$sessSavePath = DEDEDATA."/sessions/";<br>
If(is_writeable($sessSavePath) && is_readable($sessSavePath)){ session_save_path($sessSavePath) } <br><div class="clear">;</div>
ログイン後にコピー