問題描述

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

我已經在所有頁面上插入了 session_start(),我需要如下。

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

但不工作 Global-wise 。只是在自己的頁面上工作。它不是 call-able 在全球從另一個頁面 (使用相同的邏輯) 。

最佳解決方案

編輯:「下面的外掛不可用,所以請使用該外掛:WordPress Session Plugin

有一個很好的 WordPress 外掛改編自 CodeIgniter Session 類:WP Sessions Plugin

啟用外掛時,您可以從主題中的任何位置開始使用 $session 物件 ($session 物件只要全域性) 。例如,要在 header.php 檔案中使用 $ session 物件,只需新增以下程式碼:

global $session;

If you are a plugin developer and you want to adapt this plugin with yours, you can find standalone version in the package as well. Documentation of the plugin gives more information for plugin developers about how to adapt to your project.

這是主題和外掛開發人員的一些有用的功能。

您可以新增如下所示的會話資料:

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

我希望這有助於某人。

次佳解決方案

WordPress 不使用會話,這就是為什麼你的會話變數不工作。

事實上,如果定義了某些變數,WordPress 實際上會破壞 $_SESSION 來保持自身的無狀態。

但是,如果您真的想使用會話,請嘗試在 wp-config.php 檔案的開頭新增 session_start()。每當 WP 啟動時,這將 (希望) 啟動會話,因此您可以在系統中的其他位置設定和讀取 $_SESSION 變數。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。