¿Cómo usar mi propio valor de sesión personalizado en Wordpress?

17

¿Cómo puedo usar mi propio valor de sesión (personalizado) en Wordpress?
Por ejemplo:$_SESSION['myname']="4lvin"

Ya he insertado session_start()en toda la página que necesito de la siguiente manera.

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

Pero no funciona a nivel mundial.
Solo estoy trabajando en la página personal.
NO se puede llamar globalmente desde otras páginas (usando la misma lógica).

夏 期 劇場
fuente
¿Puede aclarar la naturaleza específica de WordPress de su pregunta?
Chip Bennett el
1
" ¿Cuál es la naturaleza específica de WordPress? ", Es decir, ¿de qué manera está relacionada su pregunta con WordPress ?
Chip Bennett el
1
Veo una pregunta sobre las cookies de sesión . No veo nada específico de WordPress , por eso pedí aclaraciones.
Chip Bennett el
2
No. Las sesiones y las cookies son temas generales de Internet / navegador web en los que WordPress es completamente independiente.
Chip Bennett el
55
Sí, las sesiones y las cookies son temas generales, pero se trata más de hacer que las sesiones funcionen con WordPress ... y dado que WP en sí no usa sesiones, es relevante aquí.
EAMann

Respuestas:

13

EDITAR: "EL PLUGIN A CONTINUACIÓN NO ESTÁ DISPONIBLE MÁS, ASÍ QUE UTILICE ESE PLUGIN EN LUGAR: WordPress Session Plugin "

Hay un buen complemento de WordPress adaptado de la clase de sesión CodeIgniter: WP Sessions Plugin .

Cuando activa el complemento, puede comenzar a usar el $sessionobjeto desde cualquier lugar de su tema ( $sessionobjeto siempre que sea global). Por ejemplo, para usar el objeto $ session en el header.phparchivo, simplemente agregue este código:

global $session;

Si usted es un desarrollador de complementos y desea adaptar este complemento con el suyo, también puede encontrar una versión independiente en el paquete. La documentación del complemento proporciona más información para los desarrolladores de complementos sobre cómo adaptarse a su proyecto.

Aquí hay algunas funciones útiles para desarrolladores de temas y complementos.

Puede agregar datos de sesión como este:

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

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

$session->set_userdata( $array );

Para recuperar datos de sesión:

$session->userdata( 'username' );

Para obtener todos los datos de la sesión:

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

Para eliminar un elemento de la sesión:

$session->unset_userdata( 'username' );

Para eliminar más elementos de la sesión:

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

También puede utilizar Flashdata que son datos de sesión que sólo estarán disponibles para la siguiente petición del servidor, a continuación, se borra automáticamente. Estos pueden ser muy útiles cuando se utilizan para los informativos o mensajes de estado (por ejemplo, “Producto ha sido eliminado”).

// 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 la sesión:

$session->sess_destroy();

El complemento también admite códigos cortos . Puede imprimir cualquier dato de sesión en sus publicaciones o páginas:

[session key="username"]

Para llegar a segunda clave:

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

Espero que esto ayude a alguien.

beytarovski
fuente
1
¿WP Sessions Plugin no está ahí?
Kiren Siva
1
Sí, querrás usar ese: wordpress.org/plugins/wp-session-manager (Esto es mucho mejor y más estable).
beytarovski
¿Por qué no podemos usar la funcionalidad de sesión predeterminada de PHP en WordPress? Esta solución crea dependencia en un complemento.
Amrit
@Amritpal porque no todos los servidores PHP / Apache admiten sesiones. Si desea construir un software / complemento público como WP, debe pensarlo. Si es un proyecto personal donde puede editar el servidor, eso no es un problema.
beytarovski
8

WordPress no usa sesiones, es por eso que las variables de sesión no funcionan.

De hecho, si se definen ciertas variables, WordPress realmente destruirá $_SESSIONpara mantenerse sin estado .

Pero si realmente desea usar sesiones, intente agregar session_start()al comienzo de su wp-config.phparchivo. Esto (con suerte) comenzará las sesiones cada vez que se inicie WP, por lo que podrá configurar y leer sus $_SESSIONvariables en otras partes del sistema.

EAMann
fuente
Vi que Wordpress usa Cookies para almacenar algunos datos de inicio de sesión. Cuando imprimí la matriz $ _COOKIE, pude ver algunos datos. Me gustaría establecer esos datos manualmente. Más información aquí: stackoverflow.com/questions/21595900/…
shasi kanth
1
Además, ¿se recomienda modificar el archivo wp-config.php para comenzar la sesión? Si actualizamos Wordpress más tarde, ¿también se actualiza el archivo wp-config.php?
shasi kanth
Tutorial que trata sobre esto más silvermapleweb.com/using-the-php-session-in-wordpress
nu everest
1
@shasikanth no, wp-cofnig.phpno se toca en las actualizaciones.
T.Todua
1
@shasikanth wp-config.phpno se actualizará, de lo contrario podría perder su conexión de base de datos y otros parámetros que haya configurado manualmente.
Erenor Paz
-5

Wordpress lo admite .

Debe agregar las siguientes líneas en la parte superior defunctions.php

if ( ! session_id() ) {
    session_start();
}
Alvin
fuente
10
¿Por qué comenzarías la sesión dos veces?
kaiser