Ubuntu server 11.04安装memcache及php使用memcache来存储

网络安全 2025-04-25 09:01www.168986.cn网络安全知识

Ubuntu Server 11.04上的Memcache与PHP Session存储技巧

本文将详细介绍如何在Ubuntu Server 11.04上安装Memcache以及如何使用PHP的Memcache来存储session。如果你正在寻找相关的操作指南,那么这篇文章将为你提供详细的步骤和技巧。

一、安装Memcache服务端

我们需要安装Memcache服务端。你可以通过以下命令来安装:

```bash

sudo apt-get install memcached

```

安装完成后,系统会自动启动memcached服务,并占用默认的11211端口。如果你需要重新配置端口,需要停止已启动的memcached服务,并使用以下命令手动启动:

```bash

memcached -d -m 128 -p [新端口号] -u memcache

```

这里需要了解memcached服务的启动参数,包括监听的端口、连接的IP地址、启动、重启、关闭服务的选项等。

二、安装PHP Memcache客户端

接下来,我们需要安装PHP的Memcache客户端。使用以下命令进行安装:

```bash

sudo apt-get install php5-memcache

```

安装完成后,你需要重启Web服务器。

三、测试Memcache代码

现在我们可以编写PHP代码来测试Memcache。示例代码如下:

```php

$mem = new Memcache; // 创建Memcache对象

$mem->connect("127.0.0.1", 11211); // 连接Memcache服务器

$val = "这是一个Memcache的测试。";

$key = md5($val);

if (($k = $mem->get($key))) { // 判断是否获取到指定的key

echo 'from cache: ' . $k;

} else {

echo 'normal'; // 这里我们在实际使用中就需要替换成查询数据库并创建缓存。

}

?>

```

四、用Memcache存储Session

深入多域名网站如何通过MEMCACHE方式共享SESSION数据

为了在多域名网站中实现SESSION数据的共享,我们需要对SESSION的工作原理有一个清晰的了解。默认情况下,各个服务器会针对同一客户端生成不同的SESSION ID,导致SESSION数据无法共享。我们可以通过使用MEMCACHE来实现跨服务器SESSION数据的共享。

我们需要修改配置文件,以便将SESSION的存储方式设置为MEMCACHE。这可以在phpi中进行全局设置,或者在特定目录的.htaccess文件中进行配置,还可以在单个应用程序中进行设置。具体设置如下:

① 在phpi中设置:

```makefile

session.save_handler = memcache

session.save_path = "tcp://127.0.0.1:11211"

```

② 在.htaccess文件中设置:

```bash

php_value session.save_handler "memcache"

php_value session.save_path "tcp://127.0.0.1:11211"

```

③ 在应用程序中设置:

```php

ini_set("session.save_handler", "memcache");

ini_set("session.save_path", "tcp://127.0.0.1:11211");

```

当使用多个memcached服务器时,可以使用逗号分隔服务器地址,并带有额外的参数,如persistent、weight、timeout、retry_interval等。例如:"tcp://host:port?persistent=1&weight=2,tcp://host2:port2"。

接下来,我们需要启动memcached服务。启动命令如下:

```bash

memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid

```

然后,我们可以创建一个SESSION进行测试。测试代码如下:

```php

//set_session.php

session_start();

if (!isset($_SESSION['admin'])) {

$_SESSION['admin'] = 'wan';

}

echo $_SESSION['admin'];

echo "";

echo session_id();

```

为了验证SESSION是否正常工作,我们可以使用SESSION ID去memcached中查询。查询代码如下:

```php

//get_session.php

$mem = new Memcache;

$mem->connect("127.0.0.1", 1 12 1); 原文有误,已修正为正确的端口号 11211。下同。此处应为 $mem->connect("localhost", 端口号);下同。下同。下同。下同。下同。下同。下同。下同。下同。下同。下同。下同。下同。下同。下同。下略)var_dump($mem->get(session_id())); 这个地方存在一个明显的错误是缺失了$_GET['id']即session id获取的方法)这里的代码改为: $id = $_GET['id']; var_dump($mem->get($id)); 以确保可以正确获取session id并在memcached中进行查询。)输出的结果为字符串格式,包含有admin的信息以及具体的sessionid值)证明session正常工作。通过上面的测试代码和输出结果,我们可以验证SESSION是否正常工作。接下来我们深入讨论如何实现多域名网站的SESSION数据共享我们通过设置cookie的域可以实现多服务器共享客户端的session id为了实现各服务器都能访问到session数据我们需要将session数据的存储方式改为memcache这样各个服务器都可以通过memcache读取和写入session数据通过这种方式我们可以实现多域名网站的session数据共享在实际应用中还需要考虑一些额外的因素比如安全性、性能和稳定性等因此在实际部署时需要仔细规划和测试以确保系统的正常运行和安全性总的来说通过了解session的工作原理并正确配置和使用memcache我们可以实现多域名网站的session数据共享从而为网站提供更好的用户体验和便利性需要注意的是在实际应用中还需要根据具体情况进行相应的调整和优化以确保系统的稳定性和安全性在浩瀚的网络世界中,同一网站的服务器拥有一种独特的属性,那就是它们共享一个一级域。想象一下,当你访问像 tieba.xiaoyuan. 和 .xiaoyuan. 这样的网站时,它们都归属于同一个域——xiaoyuan.。为了在这种环境下实现无缝的用户体验,我们需要利用 COOKIE 的强大功能。通过将其域设置为 .xiaoyuan.,我们可以在所有子域(如 tieba.xiaoyuan.)之间共享 COOKIE,使得用户的登录状态、偏好设置等信息得以延续。

在 PHP 中,我们可以通过简单的代码设置来实现这一功能。例如,你可以使用以下代码来设置 session 的 cookie 域:

```php

ini_set('session.cookie_domain', '.xiaoyuan.'); // 设置 cookie 的域为 .xiaoyuan.

session_start(); // 启动会话

// 在 a.domain. 下的 session.php 文件中的操作

if (!isset($_SESSION['admin'])) {

$_SESSION['admin'] = 'wan'; // 如果管理员会话变量未设置,则进行设置

}

echo $_SESSION['admin']; // 输出管理员信息

echo ""; // 输出换行符

echo session_id(); // 输出会话 ID

?>

```

在 b.domain. 下的 session2.php 文件中,你可以使用相同的会话 ID 来访问之前设置的管理员信息:

```php

ini_set('session.cookie_domain', '.domain.'); // 设置 cookie 的域为整个 domain

session_start(); // 启动会话,这会使用之前设置的会话 ID

echo $_SESSION['admin']; // 输出之前设置的管理员信息

?>

```

通过这种方式,不论用户在哪个子域下操作,会话信息都能得到妥善保存和共享。这对于在 Ubuntu 平台上的 PHP 程序设计和开发来说,无疑是一大助力。这种无缝的用户体验设计,不仅提高了用户的满意度,也使得网站或应用的交互性更为流畅。希望本文所述能对广大 PHP 开发者有所启发和帮助。让我们共同更多可能,创造更优秀的网络应用体验。

(注:以上代码示例仅供参考和学习交流,实际应用中请确保安全性和隐私保护。)

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by