我正在嘗試在不使用 php$_SESSION變數且不讓用戶登錄網站的情況下創建會話。我創建了一個表單,一旦訪客/訪客用戶提交表單,我想將他的資料存盤在會話變數中。我發現$_SESSION在 wordpress 中使用不是一個好習慣。我看了一些教程,發現可以使用WP_Session. 這似乎也不適合我。
這是我正在使用的代碼:
global $wp_session;
$wp_session['visitorInfo'] = 'some_text_here';
當我在另一個頁面上請求它時,它什么也沒給我(空白)。即使我嘗試列印$wp_session變數,它也會給我空白。我也嘗試過$wp_session = WP_Session::get_instance();,但它回傳錯誤Class WP_Session not found可能是因為我正在為呼叫此方法的類使用命名空間。
我也試過
add_action('init',array($this,'start_session'));
public function start_session(){
if (!session_id()) { session_start();}
}
但它不作業。
我的網站托管在 wpengine 上,它不允許創建自定義 cookie。我試圖弄清楚當用戶登錄網站時 wordpress 如何創建他們的會話。我從過去 2 天開始一??直在尋找解決方案,但沒有找到任何可行的解決方案。
您能否建議我如何實作這一目標。
很多人提前感謝!
uj5u.com熱心網友回復:
使用init鉤子session_start()在沒有 WP Engine 的普通服務器上作業正常。
示例代碼:
<?php
/**
* Plugin Name: Session plugin.
*/
add_action('init', 'sesp_init');
function sesp_init()
{
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
$_SESSION['hello'] = 'world';
}
add_action('template_redirect', 'sesp_template');
function sesp_template()
{
echo 'hello ' . $_SESSION['hello'].'<br>';
}
它在頭版上說你好世界。
WP_Session
該類WP_Session不是 WordPress 核心類。我在 WordPress 核心檔案中的任何地方都找不到這個類,WP_Session_Token但那不是用于會話的。
該類WP_Session來自WP Session Manager 插件(參考this question)。您必須安裝該插件才能訪問WP_Session. 否則會出現這個錯誤。
未找到類 WP_Session
使用瞬態。
從檔案。
WordPress Transients API,它提供了一種在資料庫中臨時存盤快取資料的簡單且標準化的方法
所以,如果session_start()它不是真的作業并且你不想安裝其他插件,你可以使用它作為替代。
示例代碼:
add_action('init', 'sesp_init');
function sesp_init()
{
set_transient('sesp_hello', 'moon', 60*5);// 5 minutes.
}
add_action('template_redirect', 'sesp_template');
function sesp_template()
{
echo 'hello ' . get_transient('sesp_hello') . ' (use transient).<br>';
}
你不需要掛鉤init來設定瞬態。例如上面的代碼。in 第三個引數set_transient()是以秒為單位的過期時間。
臨時警告!
但是,瞬態不適合像會話這樣的訪問者。您必須正確設定并檢查您獲得的瞬態和設定是否適合某個人。
WP引擎
從他們的支持頁面。
這帶來的最大問題是由于唯一的會話 ID。唯一 ID 有效地破壞了快取并導致每個會話都未快取。這將導致您的網站出現嚴重的性能問題。
您可以切換到使用 PHP cookie或禁用 WP Engine 快取。這是在這里回答的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/418957.html
標籤:
