在非wp页面中从wp页面访问$ _SESSION变量

时间:2012-11-18 21:26:51

标签: php wordpress

我的wordpress博客需要用户名&密码。在我放置的第一个wp页面上:

<?php 
  global $current_user;
  get_currentuserinfo();
  $name = $current_user->user_firstname . ' '.$current_user->user_lastname;
  $_SESSION['memberName'] = $name;
  echo '<h2>Welcome ' . $name . '</h2>';
?>

正如所料,“欢迎”与用户名一起出现。我有一个自定义菜单,用于将用户转移到NON-WP页面,其初始行为:

<?php 
  session_start(); 
  $name = $_SESSION['memberName'];
?>

但是,在链接到此非wp页面后,$ name为空。如何在会话中传输!名称?

4 个答案:

答案 0 :(得分:0)

将WP加载为WP,如下所示:

require_once('PathToBlogRoot/wp-load.php');

我认为这是实现这一目标的最简单方法。

答案 1 :(得分:0)

如果它位于同一个域中,您可以将其添加到cookie中,如此

<?php 
  global $current_user;
  get_currentuserinfo();
  $name = $current_user->user_firstname . ' '.$current_user->user_lastname;
  setcookie("guest_name", $name);

  echo '<h2>Welcome ' . $name . '</h2>';
?>

然后在NON WP页面上你有类似

的东西
<?php echo $_COOKIE('guest_name'); ?>

如果要将它们重定向到另一个域,最好将用户名放在GET参数中。就像您重定向到新页面时一样,您只需添加用户名

<?php


   $name = $current_user->user_firstname . ' '.$current_user->user_lastname;
   header( 'Location: http://your_non_wp_page/index.php?username='.$name ) ;

?>

然后在那个页面上你做

<?php echo $_GET['username']; ?>

但是cookie会更持久。

答案 2 :(得分:0)

为什么不使用WP Sessions Plugin。它为您创建会话,当用户更改其个人资料数据时,此插件还会更新其会话数据。同时,如果用户注销,则插件会从数据库中删除其会话数据。

一些例子:

您可以添加会话数据,如下所示:

// One value
$session->set_userdata( 'username', 'john' );

// Passing array
$array = array(
    'username' => 'john',
    'email'    => 'john@gmail.com'
);

$session->set_userdata( $array );

检索会话数据:

$session->userdata( 'username' );

获取所有会话数据:

$session->all_userdata(); // returns array

从会话中删除一个项目:

$session->unset_userdata( 'username' );

从会话中删除更多项

$array = array(
    'username' => '',
    'email'    => ''
);
$session->unset_userdata( $array );

您还可以使用 Flashdata ,这是仅可用于下一个服务器请求的会话数据,然后自动清除。当您将它们用于信息性状态消息时(例如“产品已被删除”),这些非常有用。

// Add Flashdata
$session->set_flashdata( 'item', 'value' );

// Retrieve Flashdata
$session->flashdata( 'item' );

// Preserving flashdata 
// (if you need to preserve flashdata through an additional request, 
// you can use this function):
$session->keep_flashdata( 'item' );

摧毁会话:

$session->sess_destroy();

该插件还支持短代码。您可以在帖子或页面上打印任何会话数据:

[session key="username"]

我希望这会有所帮助。

答案 3 :(得分:0)

虽然弗拉基米尔获得了一些荣誉 - 因为他指向我setcookie() - 一个主要问题是需要在文件中的html行之前放置setcookie;在WP中不那么容易。在WordPress中为数不多的几个地方之一是在functions.php文件中; e.g:

function set_user_cookie() {
  global $current_user;
  get_currentuserinfo();
  $name = $current_user->user_firstname . ' '.$current_user->user_lastname;
  setcookie('member_name', $name,time()+60*60*20,'/');   // 20 hours
}
add_action( 'init', 'set_user_cookie');

然后很容易在我的非wp页面中检索cookie信息