如果输入验证失败,我只需要使用会话来维护从edit.php
(1) 到post.php
(2) 到(3) 的表单输入,这样我的用户就不必用他们的 (3)重新填写表单由于 (2) 之前在 (1)的条目不会重新发布到(3)。有多种方法可以通过此隧道传输数据: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,我只使用两个会话变量:
// 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 Session 最佳实践。
解决方案:我最终放弃了整个会话 caboodle 并实现了 1 秒到期的冲突解决(至少对于我的用例)瞬态。谢谢@Robbie