搜索热词

WordPress中文社区 > 专栏 > WP终身学习者 > 如何让WordPress支持PHP Session来提高项目的安全性和高效性?

如何让WordPress支持PHP Session来提高项目的安全性和高效性?

发布于09月14日 被浏览 791 次

PHP Session变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。

Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。

在WordPress主题开发过程中,session可以让你的程序更安全、更高效,比如我们可以使用session来保护我们WordPress网站上的视频不能轻易的被用户下载。可惜的是,Wordpress核心并不支持session。

那么是不是就是说如果我们使用WordPress开发项目的话,就没办法使用session了呢?不是的,我们可以按照以下的方法来帮助我们的WordPress支持session。

1、启动WordPress支持SESSION

我们可以使用WordPress的初始化钩子,并把 Action 的优先级设置为 1,这样在其他功能启动之前,我们就已经启动 Session 了。具体操作方式为,把下面的代码放到您的fuctions.php中

add_action( 'init', function ()
{
   if ( ! session_id() ) {
      session_start();
   }
}, 1 );

当然,看到上面的代码有的朋友可能会想,里面的核心代码不就是一个session_start()嘛,我直接在使用SESSION的页面最顶部使用<?php session_start();?>不就行了吗?哈哈,那如果你有好多个页面要用那岂不是每个页面都要写吗?所以还是上面的代码最方便了。

2、在用户登录或注销时销毁 Session 数据

为了避免用户注销或登录其他账户时,用户的 Session 数据不会消失,我们需要在用户登录和注销时,为用户销毁 Session 数据。我们使用 WordPress 的 ‘wp-login’ 和 ‘wp-logout’ 这两个钩子来帮助用户在登录或注销时自动销毁 Session 数据。

add_action('wp_logout', 'destroy_session');
add_action('wp_login', 'destroy_session');
function destroy_session() {
    session_destroy ();
}

3、保存和使用Session

以上两步操作完成以后,我们就可以直接在需要使用的地方使用PHP的$_SESSION 变量来保存和获取 Session 数据了

//使用$_SESSION变量保存数据
$_SESSION['message'] = "要保存的数据";

//获取SESSION的数据来使用
if(isset($_SESSION['message'])) {
    $value = $_SESSION['message'];
} else {
    $value = '';
}
点赞 收藏 打赏 分享

0 条评论

无意义的评论将很快被删除,账号将被禁止发言。 发表评论 0/500
 
  1. 还没有任何评论,你来说两句吧