入力の検証が失敗した場合にedit.php
(1) からpost.php
(2) から(3) へのフォーム入力を維持するためだけにセッションを操作する必要があるため、ユーザーは(3) でフォームを再入力する必要がありません。(2)は(3)に再投稿しないため、(1)の以前のエントリ。このトンネルを介してデータを一時的に転送するには、いくつかの方法があります。edit.php
save_post
edit.php
edit.php
post.php
edit.php
- WordPress はメッセージにクエリ文字列を使用します - 私の目的のためのクエリ文字列の一般的な短所は別として、クエリ文字列に対して
$_POST
変数が多すぎる可能性があるため、この方法は使用しませんでした - Transient API - いいえ、(リモートで可能性のある) 衝突の理由で、これも違います
- edit.php と post.php を直接変更します - 特に更新時に持続不可能です。他に何も見つからない場合は、これのフックを探すことができます
- セッション、
とりわけ。
ログインにはセッションを使用しません (WordPress を使用しているため、WordPress に任せます) functions.php
。
/*
* manage sessions
*/
// http://wblinks.com/notes/secure-session-management-tips
// http://devondev.com/2012/02/03/using-the-php-session-in-wordpress/
// http://en.wikipedia.org/wiki/Session_fixation
// http://www.php.net/manual/en/function.session-regenerate-id.php
if (is_admin()) add_action('init', 'empl_sesh_start', 1);
add_action('wp_login', 'empl_sesh_cleanup');
add_action('wp_logout', 'empl_sesh_cleanup');
function empl_sesh_start() {
session_start();
// check if loaded session is server-generated
if (!isset($_SESSION['IS_SERVER_TRUSTED']))
session_regenerate_id(true); // if not, regenerate id and clean-up previous session files
// regenerate id for every request
session_regenerate_id();
$_SESSION['IS_SERVER_TRUSTED'] = true; // set flag
}
// cleanup
function empl_sesh_cleanup() {
session_start(); // needed for the rest of this function to work
$_SESSION = array(); // cleanup session variables
session_regenerate_id(true); // regenerate id and clean-up previous session files
session_destroy();
}
私はそれが正しかったかどうかを知る必要があります。特に気になる
- セッションステートメントの順序と呼び出しは正しいですか?
- それらは必要ですか (オンライン記事で指摘されているように、セッションの脆弱性を軽減するために)?
また、Cookie の設定解除とその複雑さについて読んだことにも関心があります - そうする必要がありますか? Cookie は使用せず、次の 2 つのセッション変数を使用するだけです。
// persist form vars to next load
$_SESSION['empl_form_inputs'][] = $_POST['empl_age'];
// more similar code here...
$_SESSION['empl_form_inputs'][] = $_POST['empl_id'];
// persist message array to next load
$_SESSION['empl_messages'] = $empl_messages;
これは wordpress.stackexchange.com ではなくここに投稿しました。(私が思うに)これは実際には WordPress に関する質問ではなく、PHP セッションのベスト プラクティスに近いものです。
解決策:私は最終的にセッション全体を放棄し、1 秒の有効期限を持つ衝突に対処する (少なくとも私のユース ケースでは) トランジェントを実装しました。ありがとう@Robbie