2013-04-24 19 views
12

Memcachedセッションとストアセッションを維持するためにサーバーを用意しているので、すべてのサーバーが同じセッションで問題なく処理できます。異なるサーバー上のセッション変数にアクセスできない

しかし、何とか私は、PHPセッションに関するMemcachedの可能性の意味を誤解していると思います。

私はApache 1 a.domain.comに立ってセッションを作成できると思っていました。 $_SESSION['test'] = "This string is saved in the session"を開き、Apache 2 b.domain.comまたはc.domain.comに行き、セッションを続行してecho $_SESSION['test'];と入力すると、文字列が出力されます。

私は同じセッションを共有する複数のWebサーバーを持っている場合、memcachedが素晴らしいツールになると言われました。

どうしたのですか?ところで

enter image description here

。 Memcachedに基づいて、サーバーの設定、PHPの使用、クラスターの構築などを記述する完全なチュートリアルや電子ブックが真剣に必要です。私のphp.iniファイルで

それは言う:

session.save_path = "192.168.100.228:11211"

チュートリアルは、プロトコルを定義していない私に言った、とIPアドレスがApache 3に与えられている - memcachedサーバをここで

がありますsession.cookie_domainにするphpinfoの画像() enter image description here

ドメインはdomainと呼ばれるが、それはであり、されていません。 この画像のために変更されました。

EDIT:ただ情報について

。私が単純なMemcachedベースのPHPコマンドを使用しているとき、すべてが完璧に機能します。しかし、何とかセッションを保存しようとすると、memcachedサーバーはアイテムを保存しません。

これは動作します:

<?php 
$m = new Memcached(); 
$m->addServer('192.168.100.228', 11211); 

$m->set('int', 99); 
$m->set('string', 'a simple string'); 
$m->set('array', array(11, 12)); 
/* expire 'object' key in 5 minutes */ 
$m->set('object', new stdclass, time() + 300); 


var_dump($m->get('int')); 
var_dump($m->get('string')); 
var_dump($m->get('array')); 
var_dump($m->get('object')); 
?> 

これは

<?php 
session_start(); 
$_SESSION['name'] = "This is a simple string."; 
?> 

EDIT 2は動作しません:SOLUTION

を私はクッキーを含むキャッシュの履歴を削除した後などに気づきましたブラウザは仕事を終了しませんでした。この問題は、各サブドメインをお互いに分離させた元の個々のセッションIDにハングアップするという事実のために継続されました。

ここで定義されている内容はすべて正しいです。あなたが求めたときにブラウザがCookieをリセットしていることを確認してください。 >。 <

+3

ニースグラフィックス..... :) – Baba

+3

おかげ..イラストレーター – Dimser

+1

で:) 5分はあなたが完全な情報にあなたを追加することができますhave in session.save_path' – Baba

答えて

2

デフォルト(セッション)のCookieはドメイン固有であるため、あなたのPHPにCookieドメインを設定してください。INI

session.cookie_domain = ".domain.com" 

また、あなたのウェブサーバを再起動し、変更を行った後、ブラウザのクッキーをすべてクリアしていることを確認してくださいここで Allow php sessions to carry over to subdomains

参照してください。同じ名前でサブドメインが異なるCookieがあると、ブラウザが混乱する可能性があります。チェックする

他のもの:

セッションは、個々のサーバー上で正常に動作すること。

大きなコードベース、特に継承された/サードパーティのもので作業している場合は、何かオーバーライドする可能性がある場合は、phpinfo()を使用してセッションハンドラが適切に設定されていることを確認してください。

たとえば、phpbbのようなサードパーティのコードを使用している場合は、Cookieの設定が正しいことを確認してください。

(関連するすべての情報を保管、ブレーンストーミングを削除するには整理この答えを注意してください)

+0

うーん..ちょうどそれをテストしました。どちらかと思われませんでした。 – Dimser

+0

さらに試してみました – CodeMonkey

+0

memcachedの中に何も表示されていませんが、 'page.php'の' b.domain.com'にセッション変数を作成して、 'page2.php 'に変数をエコーし​​ました'を同じサーバー上に作成します。それはうまくいきました..しかし、その間にMemcachedには何も保存されていませんでした。 – Dimser

関連する問題