Wordpressで独自のカスタムセッション値を使用する方法


17

Wordpressで独自の(カスタム)セッション値を使用するにはどうすればよいですか?
例えば:$_SESSION['myname']="4lvin"

私はすでにsession_start()次のように必要なすべてのページに挿入しました。

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

しかし、グローバルに機能していません。
セルフページで作業するだけです。
(同じロジックを使用して)別のページからグローバルに呼び出すことはできません。


WordPress固有の質問の性質を明確にしてください。
チップベネット

1
WordPress特有の性質とは?」-つまり、あなたの質問はWordPressにどのように関連していますか?
チップベネット

1
セッションCookieに関する質問が表示さます。WordPressに固有のものは見当たらないため、説明を求めました。
チップベネット

2
いいえ。セッションCookieは、一般的なインターネット/ Webブラウザーのトピックであり、WordPressは完全に不可知です。
チップベネット

5
はい、セッションとCookieは一般的なトピックですが、これはセッションをWordPressで動作させることに関する問題です...そしてWP自体はセッションを使用しないため、ここで関連します。
EAMann

回答:


13

編集:「以下のプラグインはもう利用できないので、プラグインの代わりに使用してください:WordPressセッションプラグイン

CodeIgniter Sessionクラスから採用された優れたWordPressプラグイン、WP Sessions Pluginがあります。

プラグインをアクティブにする$sessionと、テーマ内のどこからでもオブジェクトの使用を開始できます($sessionグローバルな限りオブジェクト)。たとえば、$ sessionオブジェクトをheader.phpファイルに使用するには、次のコードを追加するだけです:

global $session;

プラグイン開発者であり、このプラグインを自分のものに適合させたい場合は、パッケージにスタンドアロンバージョンもあります。プラグインのドキュメントは、プラグイン開発者にプロジェクトへの適応方法に関する詳細情報を提供します。

テーマ開発者とプラグイン開発者の両方に役立つ機能をいくつか紹介します。

次のようなセッションデータを追加できます。

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

セッションから1つのアイテムを削除するには

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

2番目のキーに到達するには:

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

これが誰かに役立つことを願っています。


1
WPセッションプラグインはありません!??
キレンシヴァ

1
はい、それを使用する必要があります:wordpress.org/plugins/wp-session-manager(これははるかに優れており、安定しています)。
ベイタロフスキー


WordPressでPHPのデフォルトのセッション機能を使用できないのはなぜですか?このソリューションは、プラグインへの依存関係を作成します。
アムリット

@Amritpalは、すべてのPHP / Apacheサーバーがセッションをサポートしているわけではないためです。WPのようなパブリックソフトウェア/プラグインを構築する場合は、それについて考える必要があります。サーバーを編集できる個人的なプロジェクトであれば、それは問題ではありません。
ベイタロフスキー

8

WordPressはセッションを使用しないため、セッション変数は機能しません。

実際のところ、特定の変数が定義されている場合、WordPressは実際に破棄$_SESSIONしてステートレスを維持します

しかし、本当にセッションを使用したい場合session_start()は、wp-config.phpファイルの先頭に追加してみてください。これにより、(願わくば)WPが起動するたびにセッションが開始されるので$_SESSION、システム内の他の場所で変数を設定および読み取ることができます。


WordpressはCookieを使用してログインデータを保存していることがわかりました。$ _COOKIE配列を印刷すると、いくつかのデータが表示されました。そのデータを手動で設定したいと思います。詳細:stackoverflow.com/questions/21595900/...
shasi kanth

1
また、セッションを開始するためにwp-config.phpファイルを変更することをお勧めしますか?後でWordpressを更新すると、wp-config.phpファイルも更新されますか?
シャシカント14年

これをさらに説明するチュートリアルsilvermapleweb.com/using-the-php-session-in-wordpress
nu everest

1
@shasikanthいや、wp-cofnig.php更新については触れられていません。
T.Todua

1
@shasikanth wp-config.phpは更新されません。そうしないと、DB接続や手動で設定した他のパラメーターが失われる可能性があります。
エレノールパス

-5

Wordpressはそれをサポートします。

次の行を上部に追加する必要がありますfunctions.php

if ( ! session_id() ) {
    session_start();
}

10
セッションを2回開始するのはなぜですか?
カイザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.