WordPress开发:登录设置/登出删除额外Cookie的代码放置PHP文件咨询
嗨,我来帮你搞定这个需求!
在WordPress里,你完全不需要修改核心文件(绝对别碰核心文件,更新会直接覆盖你的代码),最稳妥的方式是把代码放到以下位置:
推荐的代码放置位置
- 子主题的
functions.php文件:这是最优选择,因为子主题不会被父主题的更新覆盖,能保证你的代码一直生效。如果还没创建子主题,花几分钟弄一个很值得。 - 父主题的
functions.php文件:如果暂时不想弄子主题,也可以直接放这里,但记得每次主题更新前备份代码,不然更新后代码就没了。 - 自定义插件文件:如果你正在开发自己的插件,把代码放到插件的主PHP文件里也完全没问题,这样代码和主题解耦,切换主题也不受影响。
具体代码示例
下面是实现登录设Cookie、登出删Cookie的完整代码,直接复制到上面说的文件里就行:
登录时设置Cookie
// 监听登录动作,设置自定义Cookie add_action('wp_login', 'set_custom_login_cookie', 10, 2); function set_custom_login_cookie($user_login, $user) { // 这里可以自定义Cookie名称、值,过期时间设为24小时(86400秒) setcookie( 'custom_user_session', // Cookie名称,你可以改成自己的 $user->user_email, // Cookie值,这里用用户邮箱,你也可以换其他用户字段 time() + 86400, // 过期时间:当前时间+24小时 COOKIEPATH, // 路径,用WordPress内置常量保证和默认Cookie一致 COOKIE_DOMAIN, // 域名,同样用内置常量 is_ssl(), // 仅在HTTPS下发送Cookie(如果你的站是HTTPS,这个会自动生效) true // 开启HttpOnly,提升安全性,防止XSS攻击 ); }
登出时删除Cookie
// 监听登出动作,删除自定义Cookie add_action('wp_logout', 'delete_custom_login_cookie'); function delete_custom_login_cookie() { // 删除Cookie的关键是把过期时间设为过去的时间,参数要和设置时完全一致 setcookie( 'custom_user_session', '', time() - 3600, // 过期时间设为1小时前,确保浏览器删除它 COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true ); }
注意事项
- 一定要保证Cookie的参数(路径、域名、HttpOnly等)和WordPress默认Cookie一致,不然可能出现Cookie无法正常读取或删除的问题。
- 如果你需要在前端读取这个Cookie,注意如果开启了HttpOnly,JavaScript是无法读取的,这是安全设计;如果需要前端访问,可以把最后一个参数改成
false,但不推荐,尽量用后端处理。
内容的提问来源于stack exchange,提问作者Raghupati Dagu
相关产品推荐
相关产品推荐

