如何在Wordpress中使用我自己的自定义会话值?


17

如何在Wordpress中使用自己的(自定义)会话值?
例如:$_SESSION['myname']="4lvin"

我已经session_start()在所有需要的页面上插入了以下内容。

<?php
session_start();
$_SESSION['myname'] = "4lvin";
?>

但不能在全球范围内运作。
只是在自我页面上工作。
不能从另一个页面全局调用(使用相同的逻辑)。


您能否说明问题的WordPress特定性质?
Chip Bennett

1
什么是WordPress特有的性质? ”-就是说,您的问题与WordPress有什么关系?
Chip Bennett

1
我看到有关会话cookie的问题。我没有看到特定于WordPress的任何内容,这就是为什么我要求澄清的原因。
Chip Bennett

2
不。会话cookie是WordPress完全不可知的常规Internet / Web浏览器主题。
Chip Bennett

5
是的,会话和cookie是通用主题,但这更多是使会话与WordPress配合使用的问题……而且由于WP本身不使用会话,因此此处很重要。
EAMann

Answers:


13

编辑: “下面的插件已不可用,因此请使用插件代替:WordPress会话插件

有一个很好的WordPress插件改编自CodeIgniter Session类: WP Sessions Plugin

激活插件时,您可以$session从主题中的任何位置开始使用对象($session对象只要是全局对象)。例如,要将$ session对象用于header.php文件,只需添加以下代码:

global $session;

如果您是插件开发人员,并且想要将该插件与您的插件配合使用,则也可以在软件包中找到独立版本。插件文档为插件开发人员提供了有关如何适应项目的更多信息。

这对于主题和插件开发人员都是有用的功能。

您可以像这样添加会话数据:

// 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"]

要达到第二个键:

[session key="user_data" sec_key="display_name"]

我希望这对某人有帮助。


1
WP Sessions插件不存在!
Kiren Siva 2013年

1
是的,您将要使用其中之一:wordpress.org/plugins/wp-session-manager(这更好且更稳定)。
beytarovski


为什么我们不能在WordPress中使用PHP默认会话功能?该解决方案创建了对插件的依赖。
阿姆利特(Amrit)

@Amritpal,因为并非所有的PHP / Apache服务器都支持会话。如果要构建像WP这样的公共软件/插件,则必须考虑一下。如果您的个人项目可以在其中编辑服务器,那不是问题。
beytarovski

8

WordPress不使用会话,这就是您的会话变量不起作用的原因。

事实上,如果定义了某些变量,WordPress实际上会破坏$_SESSION以使其自身保持无状态

但是,如果您确实要使用会话,请尝试session_start()wp-config.php文件开头添加。每当WP启动时,这(希望)将启动会话,因此您将能够$_SESSION在系统中的其他位置设置和读取变量。


我看到Wordpress使用Cookies来存储一些登录数据。当我打印$ _COOKIE数组时,我可以看到一些数据。我想手动设置该数据。这里更多的信息:stackoverflow.com/questions/21595900/...
莎丝KANTH

1
另外,是否建议修改wp-config.php文件以启动会话?如果以后更新Wordpress,wp-config.php文件也会更新吗?
shasi kanth 2014年


1
@shasikanth不,wp-cofnig.php未涉及更新。
T.Todua

1
@shasikanth wp-config.php将不会更新,否则您可能会失去数据库连接和您手动设置的其他参数。
Erenor Paz

-5

Wordpress确实支持它

您需要在以下内容的顶部添加以下行functions.php

if ( ! session_id() ) {
    session_start();
}

10
您为什么要两次开始会话?
kaiser 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.