Como usar meu próprio valor de sessão personalizada no Wordpress?

17

Como posso usar o meu próprio valor de sessão (personalizado) no Wordpress?
Por exemplo:$_SESSION['myname']="4lvin"

Eu já inseri session_start()em todas as páginas que preciso da seguinte.

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

Mas não trabalhando globalmente.
Apenas trabalhando na página própria.
NÃO é capaz de chamar globalmente de outras páginas (usando a mesma lógica).

夏 期 劇場
fonte
Você pode esclarecer a natureza específica da sua pergunta sobre o WordPress ?
Chip Bennett
11
" Qual é a natureza específica do WordPress? " - ou seja, de que forma sua pergunta está relacionada ao WordPress ?
Chip Bennett
11
Eu vejo uma pergunta sobre cookies de sessão . Não vejo nada específico para o WordPress , por isso pedi esclarecimentos.
Chip Bennett
2
Não. Sessões e cookies são tópicos gerais da Internet / navegadores da web, sobre os quais o WordPress é totalmente independente.
Chip Bennett
5
Sim, sessões e cookies são tópicos gerais, mas isso é mais uma questão de fazer as sessões funcionarem com o WordPress ... e como o WP em si não usa sessões, é relevante aqui.
EAMann 01/11/11

Respostas:

13

EDIT: "O plug-in abaixo não está mais disponível, portanto, use esse plug-in em vez de: Plugin de sessão do WordPress "

Existe um bom plug-in WordPress adaptado da classe CodeIgniter Session: WP Sessions Plugin .

Quando você ativa o plug-in, pode começar a usar o $sessionobjeto de qualquer lugar do seu tema ( $sessionobjeto desde que global). Por exemplo, para usar o objeto $ session no header.phparquivo, basta adicionar este código:

global $session;

Se você é um desenvolvedor de plug-ins e deseja adaptar esse plug-in ao seu, também pode encontrar a versão autônoma no pacote. A documentação do plug-in fornece mais informações aos desenvolvedores sobre como se adaptar ao seu projeto.

Aqui estão algumas funções úteis para desenvolvedores de temas e plugins.

Você pode adicionar dados da sessão como este:

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

// Passing array
$array = array(
    'username' => 'john',
    'email'    => '[email protected]'
);

$session->set_userdata( $array );

Para recuperar dados da sessão:

$session->userdata( 'username' );

Para obter todos os dados da sessão:

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

Para remover um item da sessão:

$session->unset_userdata( 'username' );

Para remover mais itens da sessão:

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

Você também pode usar o Flashdata, que é um dado de sessão que estará disponível apenas para a próxima solicitação do servidor, e é automaticamente limpo. Eles podem ser muito úteis quando você os utiliza para mensagens informativas ou de status (por exemplo, “O produto foi excluído”).

// 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' );

Para destruir a sessão:

$session->sess_destroy();

O plugin também suporta códigos de acesso . Você pode imprimir qualquer dado de sessão em suas postagens ou páginas:

[session key="username"]

Para alcançar a segunda tecla:

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

Espero que isso ajude alguém.

beytarovski
fonte
11
O WP Sessions Plugin não está lá! ??
Kiren Siva
11
Sim, você deve usar esse: wordpress.org/plugins/wp-session-manager (Isso é muito melhor e estável).
beytarovski
Por que não podemos usar a funcionalidade de sessão padrão do PHP no WordPress? Esta solução cria dependência em um plugin.
Amrit #
@ Amritpal porque nem todos os servidores PHP / Apache suportam sessões. Se você deseja criar um software / plug-in público como o WP, deve pensar nisso. Se o seu projeto pessoal é onde você pode editar o servidor, isso não é problema.
beytarovski
8

O WordPress não usa sessões, é por isso que suas variáveis ​​de sessão não estão funcionando.

Por uma questão de fato, se determinadas variáveis ​​forem definidas, o WordPress realmente destruirá $_SESSIONpara manter-se apátrida .

Mas se você realmente deseja usar sessões, tente adicionar session_start()no início do seu wp-config.phparquivo. Esperamos que isso inicie as sessões sempre que o WP for iniciado, para que você possa definir e ler suas $_SESSIONvariáveis ​​em outras partes do sistema.

EAMann
fonte
Vi que o Wordpress usa cookies para armazenar alguns dados de login. Quando imprimi a matriz $ _COOKIE, pude ver alguns dados. Eu gostaria de definir esses dados manualmente. Mais informações aqui: stackoverflow.com/questions/21595900/…
shasi kanth
11
Além disso, é recomendável modificar o arquivo wp-config.php para iniciar a sessão? Se atualizarmos o Wordpress posteriormente, o arquivo wp-config.php também será atualizado?
Shasi kanth
Tutorial que discute isso mais silvermapleweb.com/using-the-php-session-in-wordpress
nu Everest
11
@shasikanth não, wp-cofnig.phpnão é tocado nas atualizações.
21418 Tetrua
11
O @shasikanth wp-config.phpnão será atualizado; caso contrário, você poderá perder a conexão com o banco de dados e outros parâmetros que você definiu manualmente.
Erenor Paz
-5

Wordpress suporta .

Você precisa adicionar as seguintes linhas na parte superior dafunctions.php

if ( ! session_id() ) {
    session_start();
}
Alvin
fonte
10
Por que você iniciaria a sessão duas vezes?
Kaiser