Bagaimana cara menggunakan nilai sesi khusus saya di Wordpress?

17

Bagaimana saya bisa menggunakan nilai sesi (khusus) saya sendiri di Wordpress?
Sebagai contoh:$_SESSION['myname']="4lvin"

Saya sudah memasukkan session_start()semua halaman yang saya butuhkan sebagai berikut.

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

Tetapi tidak bekerja secara global.
Hanya bekerja di halaman mandiri.
Ini TIDAK bisa dipanggil secara global dari halaman lain (menggunakan logika yang sama).

夏 期 劇場
sumber
Bisakah Anda mengklarifikasi sifat khusus WordPress dari pertanyaan Anda?
Chip Bennett
1
" Apa sifat khusus WordPress? " - itu artinya, dengan cara apa pertanyaan Anda terkait dengan WordPress ?
Chip Bennett
1
Saya melihat pertanyaan tentang cookie sesi . Saya tidak melihat sesuatu yang spesifik pada WordPress , itulah sebabnya saya meminta klarifikasi.
Chip Bennett
2
Tidak. Sesi dan cookie adalah topik umum internet / web-browser di mana WordPress sepenuhnya agnostik.
Chip Bennett
5
Ya, sesi dan cookie adalah topik umum, tetapi ini lebih merupakan pertanyaan untuk membuat sesi bekerja dengan WordPress ... dan karena WP sendiri tidak menggunakan sesi, itu relevan di sini.
EAMann

Jawaban:

13

EDIT: "PLUGIN DI BAWAH INI TIDAK TERSEDIA APA PUN, BEGITU MENGGUNAKAN BAHWA PLUGIN INSTEAD: Plugin Sesi WordPress "

Ada Plugin WordPress yang bagus yang diadaptasi dari kelas Sesi CodeIgniter: Plugin WP Sessions .

Saat Anda mengaktifkan plugin, Anda dapat mulai menggunakan $sessionobjek dari mana saja dalam tema Anda ( $sessionobjek selama global). Misalnya, untuk menggunakan objek $ session ke header.phpfile, cukup tambahkan kode ini:

global $session;

Jika Anda seorang pengembang plugin dan Anda ingin menyesuaikan plugin ini dengan milik Anda, Anda dapat menemukan versi mandiri dalam paket. Dokumentasi plugin memberikan lebih banyak informasi untuk pengembang plugin tentang cara beradaptasi dengan proyek Anda.

Berikut adalah beberapa fungsi yang berguna untuk pengembang tema dan pengaya.

Anda dapat menambahkan data sesi seperti ini:

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

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

$session->set_userdata( $array );

Untuk mengambil data sesi:

$session->userdata( 'username' );

Untuk mendapatkan semua data sesi:

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

Untuk menghapus satu item dari sesi:

$session->unset_userdata( 'username' );

Untuk menghapus lebih banyak item dari sesi:

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

Anda juga dapat menggunakan Flashdata yang merupakan data sesi yang hanya akan tersedia untuk permintaan server berikutnya, kemudian dihapus secara otomatis. Ini bisa sangat berguna ketika Anda menggunakannya untuk informasi atau pesan status (misalnya "Produk telah dihapus").

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

Untuk menghancurkan sesi:

$session->sess_destroy();

Plugin ini juga mendukung kode pendek . Anda dapat mencetak data sesi apa pun pada posting atau halaman Anda:

[session key="username"]

Untuk mencapai kunci kedua:

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

Saya harap ini membantu seseorang.

beytarovski
sumber
1
Plugin WP Sessions tidak ada di sana! ??
Kiren Siva
1
Ya, Anda ingin menggunakannya: wordpress.org/plugins/wp-session-manager (Ini jauh lebih baik dan stabil).
beytarovski
Mengapa kita tidak bisa menggunakan fungsionalitas sesi default PHP di WordPress? Solusi ini menciptakan ketergantungan pada plugin.
Amrit
@ Ampalpal karena tidak semua sesi mendukung server PHP / Apache. Jika Anda ingin membangun perangkat lunak / plugin publik seperti WP, Anda harus memikirkannya. Jika proyek pribadinya adalah tempat Anda dapat mengedit server, itu bukan masalah.
beytarovski
8

WordPress tidak menggunakan sesi, itu sebabnya variabel sesi Anda tidak berfungsi.

Faktanya, jika variabel-variabel tertentu didefinisikan, WordPress akan benar-benar dihancurkan $_SESSIONuntuk menjaga kewarganegaraannya sendiri .

Tetapi jika Anda benar-benar ingin menggunakan sesi, coba tambahkan session_start()di awal wp-config.phpfile Anda . Ini akan (semoga) memulai sesi kapan pun WP memulai, sehingga Anda kemudian dapat mengatur dan membaca $_SESSIONvariabel Anda di tempat lain dalam sistem.

EAMann
sumber
Saya melihat bahwa Wordpress menggunakan Cookie untuk menyimpan beberapa data masuk. Ketika saya mencetak array $ _COOKIE, saya bisa melihat beberapa data. Saya ingin mengatur data itu secara manual. Info lebih lanjut di sini: stackoverflow.com/questions/21595900/…
shasi kanth
1
Juga, apakah disarankan untuk memodifikasi file wp-config.php, untuk memulai sesi? Jika kita memperbarui Wordpress nanti, apakah file wp-config.php juga diperbarui?
shasi kanth
Tutorial yang membahas ini lebih lanjut silvermapleweb.com/using-the-php-session-in-wordpress
nu everest
1
@shasikanth no, wp-cofnig.phptidak tersentuh pada pembaruan.
T.Todua
1
@shasikanth wp-config.phptidak akan diperbarui, jika tidak, Anda bisa kehilangan koneksi DB dan parameter lain yang telah Anda tetapkan secara manual.
Erenor Paz
-5

Wordpress mendukungnya .

Anda perlu menambahkan baris berikut di bagian atasfunctions.php

if ( ! session_id() ) {
    session_start();
}
Alvin
sumber
10
Mengapa Anda memulai sesi dua kali?
kaiser