如何在PHP中的不同会话之间创建共享对象?

时间:2011-11-17 17:06:10

标签: php mysql session memory shared

如何在PHP中的不同会话之间创建共享对象?

我正在考虑使用文件或MySQL内存表。使用文件不是一个好选择,因为它没有锁定并且速度很慢。使用MySQL内存表是一个不错的选择,但如何将类实例(对象)保存到表中?序列化对象并将其放到表中也很慢。

Option 1: MySQL memory table
Option 2: shm_attach,shm_detach,shm_get_var,shm_has_var,shm_put_var,..
Option 3: Memcache

问题是使用MySQL内存表需要查询。 Memcache不包含在标准PHP安装中。要在Windows上使用shm_ *函数,需要使用选项“--enable-sysvsem”从源代码构建PHP,这需要在php.ini中设置开发人员可能无法一直访问的位置。

以上哪一个更好?还有其他选择吗?

4 个答案:

答案 0 :(得分:1)

我记得在eyeOS的开发中遇到类似的问题。

我知道你并没有完全放弃使用文件,但是如果要以xml格式存储要共享的变量,该怎么办呢?

如果您希望特定于某些会话,则可以为每组会话使用唯一令牌(排序密码),并设置一个控制器,根据令牌将请求定向到正确的会话xml文件。

为了安全起见,您可以将xml信息存储在php文件中,并且只允许POST使用正确的令牌检索信息。

此方法允许您安全地访问,编辑和删除(销毁)共享会话。

答案 1 :(得分:1)

如果要在不同进程之间共享对象(类的实例),无论使用哪种存储层(数据库,内存,文件,都是serializeunserialize, ...)。

如果您不想使用serializeunserialize,那么您无能为力。

答案 2 :(得分:1)

Memcache不在标准PHP安装中。 信号量& Windows不支持共享内存功能。

最有可能唯一的解决方案是使用MySQL内存表 使用对象序列化。

答案 3 :(得分:1)

我没有看到apc提到:

http://www.php.net/manual/en/book.apc.php

不确定它是否在一个会话中,因为手册中缺少任何有关它的功能的信息,但在其他帖子中我会看到替代memcache。

我正在寻找一种类似的解决方案来存储可能必须经常使用的页面模板,并将经过身份验证的用户存储在内存表中,而不是使用php会话(第二部分我不太确定)。 / p>