この記事では、Ubuntu サーバー 11.04 が memcache をインストールし、PHP が memcache を使用してセッションを保存する例について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
1. まず memcache サーバーをインストールします:
リーリーインストールが完了すると、システムは自動的に memcached サービスを開始し、ポート 11211 を占有します
ポート 11211 のサービスを再構成する必要がある場合は、有効になっている memcached サービスを閉じる必要があります
手動開始:
リーリーここで、memcached サービスの起動パラメータについて説明する必要があります:
-p リスニングポート
-l 接続の IP アドレス。デフォルトはローカルマシンです
-d start は memcached サービスを開始します
-d restart memcached サービスを再起動します
-d stop|shutdown 実行中の memcached サービスをシャットダウンします
-d install memcached サービスをインストールします
-d アンインストール memcached サービスをアンインストールします
-u として実行 (root として実行する場合のみ有効)
-m 最大メモリ使用量 (MB 単位)。デフォルトは64MB
-M メモリが枯渇した場合、項目を削除する代わりにエラーを返します
-c 同時接続の最大数、デフォルトは 1024 です
-f ブロック サイズ増加係数、デフォルトは 1.25-n の最小割り当てスペース、キー + 値 + フラグのデフォルトは 48
-h ヘルプを表示します
2. PHP Memecache クライアントをインストールします
リーリーWebサーバーを再起動します
memcache コードのテスト:
リーリーmemcacheを使用してセッションを保存します
通常、セッションはテキストファイルの形式でサーバー側に保存されます。 Seesion が使用されている場合、または PHP ファイルが Session 変数を呼び出したい場合は、session_start() 関数を使用して、Session を呼び出す前に Seesion を開始する必要があります。他に何も設定する必要はありません。PHP が自動的にセッション ファイルの作成を完了します。デフォルトのセッション ストレージ パスは、サーバーのシステム一時フォルダーです。
しかし、大量のデータを含むセッションが発生した場合、ファイルベースのセッション アクセスを使用する際のボトルネックは、ディスク IO 操作である可能性があります。現在では、Memcached を使用してセッション データをメモリ経由で直接保存するため、効率が大幅に向上します。 。 読み取りと書き込みの速度はファイルよりもはるかに速く、複数のサーバーがセッションを共有する必要がある場合は、これらのサーバーが同じ memcached サーバーのグループを使用するように構成するだけで、追加の作業負荷が軽減されます。
欠点は、マシンがダウンするとセッション データがメモリに保存されることです。ただし、セッション データにとっては深刻な問題ではありません。
memcached を使用してセッションを保存するにはどうすればよいですか?基本的な設定手順は次のとおりです:
1. memcached をインストールします (よくわからない場合はスキップして、前の記事を確認してください: http://www.bkjia.com/article/85510.htm)
phpinfo 出力の「登録された保存ハンドラー」に「files user sqlite」が表示されます。
2. 設定ファイルを変更します。
①.php.iniでグローバルに設定(※サーバーの再起動が必要)リーリー
②. または、特定のディレクトリ内の.htaccess:リーリー
③ アプリケーションでも使用できます:ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://127.0.0.1:11211");
"tcp://host:port?persistent=1&weight=2,tcp://host2:port2" 。
3. memcached を開始します
コードをコピーします コードは次のとおりです: memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid
リーリー
5. memcached でクエリを実行するには sessionid を使用しますリーリー
コードをコピーします コードは次のとおりです: [root@localhost html]# /usr/local/webserver/php/bin/php -f get_session.php
出力結果:
セッションが適切に機能していることを証明します。
もう一度詳しく説明します: マルチドメイン Web サイトは MEMCACHE メソッドを使用して SESSION データを共有します
SESSION の仕組みを理解すると、デフォルトで各サーバーが同じクライアントの SESSION ID を生成することがわかります。たとえば、同じユーザー ブラウザの場合、サーバー A によって生成される SESSION ID は 30de1e9de3192ba6ce2992d27a1b6a0a ですが、サーバー B は何です。生成されるのは c72665af28a8b14c0fe11afe3b59b51b です。また、PHP の SESSION データは、このサーバーのファイル システムに別途保存されます。
問題を特定したら、解決を開始できます。 SESSION データを共有したい場合は、2 つの目標を達成する必要があります。1 つは、同じクライアントに対して各サーバーによって生成された SESSION ID が同じである必要があり、同じ COOKIE を介して渡せることです。つまり、各サーバーは次のことを行うことができなければなりません。もう 1 つは、SESSION データの保存方法と場所が各サーバーにアクセスできるようにする必要があることです。簡単に言えば、複数のサーバーはクライアントの SESSION ID を共有し、サーバーの SESSION データも共有する必要があります。
第一个目标的实现其实很简单,只需要对 COOKIE 的域(domain)进行特殊地设置即可,默认情况下,COOKIE 的域是当前服务器的域名/IP 地址,而域不同的话,各个服务器所设置的 COOKIE 是不能相互访问的,如 www.aaa.com 的服务器是不能读写 www.bbb.com 服务器设置的 COOKIE 的。这里我们所说的同一网站的服务器有其特殊性,那就是他们同属于同一个一级域,如:tieba.xiaoyuan.com 和 www.xiaoyuan.com 都属于域 .xiaoyuan.com,那么我们就可以设置 COOKIE 的域为 .xiaoyuan.com,这样 tieba.xiaoyuan.com、www.xiaoyuan.com 等等都可以访问此 COOKIE。PHP 代码中的设置方法如下:
<?php ini_set('session.cookie_domain', 'xiaoyuan.com'); ?>
这样各个服务器共享同一客户端 SESSION ID 的目的就达到了。
于是 可以在 a.domain.com 下
session.php
<?php ini_set('session.cookie_domain', 'domain.com'); session_start(); if (!isset($_SESSION['admin'])) { $_SESSION['admin'] = 'wan'; } print $_SESSION['admin']; print "\n"; print session_id();
在b.domain.com下
session2.php
<?php ini_set('session.cookie_domain', 'domain.com'); session_start(); echo $_SESSION['admin'];
希望本文所述对大家Ubuntu平台上的php程序设计有所帮助。