WordPress登出后点击浏览器回退仍显示旧页面问题求助
原方案问题说明
- 触发逻辑错误:你的缓存控制代码仅在用户已登录时才输出不缓存响应头,用户登出后访问之前的用户页面时,服务端不会输出缓存控制头,浏览器会直接读取本地缓存的登出前页面内容,导致问题出现
- 钩子选择不合理:
init钩子执行时机过早,WordPress还未完成用户身份校验、页面类型判断,且未过滤页面类型,会导致所有已登录用户的请求都禁用缓存,影响公开内容的加载效率
可行解决方案
按以下步骤修改functions.php代码即可:
- 修正缓存控制逻辑,给所有受限页面添加不缓存头
function add_no_cache_for_restricted_pages() { // 仅对后台、用户中心等需要登录的页面添加禁用缓存规则,可根据自己站点的页面调整判断条件 if ( is_admin() || is_account_page() || is_user_logged_in() ) { header("Expires: Tue, 01 Jan 2000 00:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); } } // 使用template_redirect钩子,此时用户身份、页面类型都已完成判断 add_action('template_redirect', 'add_no_cache_for_restricted_pages');
- 添加未登录用户访问受限页面的跳转逻辑,做双重保险
function redirect_guest_to_login() { // 未登录用户访问受限页面直接跳转至登录页 if ( !is_user_logged_in() && (is_admin() || is_account_page()) ) { wp_redirect( wp_login_url() ); exit(); } } add_action('template_redirect', 'redirect_guest_to_login');
- 优化登出跳转代码,确保会话完全清理
add_action('wp_logout','auto_redirect_after_logout'); function auto_redirect_after_logout(){ // 主动清理用户认证Cookie,彻底销毁会话 wp_clear_auth_cookie(); $adfsurllogouturl = '你设置的登出跳转地址'; wp_redirect( $adfsurllogouturl ); exit(); }
注意事项
如果站点使用了CDN、服务端缓存插件(如WP Rocket、Redis缓存),需要把后台、用户中心等需要登录的路径加入缓存排除列表,避免服务端直接返回缓存的旧页面。
内容的提问来源于stack exchange,提问作者Gufran Hasan
相关产品推荐
相关产品推荐

