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

如何在PHP中的不同会话之间创建共享对象?,php,mysql,session,memory,shared,Php,Mysql,Session,Memory,Shared,如何在PHP中的不同会话之间创建共享对象 我正在考虑使用file或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 问题是使用M

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

我正在考虑使用file或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内存表需要查询。标准PHP安装中不包括Memcache。要在Windows上使用shm_*函数,需要使用选项“-enable sysvsem”从源代码构建PHP,这需要在PHP.ini中进行设置,开发人员可能无法始终访问该设置


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

我记得在eyeOS的开发过程中看到了一个类似的问题

我知道您不一定会放弃使用文件,但是如果您要以xml格式存储要共享的变量,该怎么办呢

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

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


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

如果您希望在不同进程之间共享对象(类的实例),则无论您使用哪种存储层(数据库、内存、文件等),您都将始终绑定到
序列化和
取消序列化


如果您不想使用
序列化
非序列化
,那么您就无能为力了。

Memcache不在标准的PHP安装中。 Windows不支持信号量和共享内存函数

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

我没有看到提到apc:

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


我正在寻找一个simular解决方案来存储可能需要大量使用的页面模板,并将经过身份验证的用户存储在内存表中,而不是使用php会话(我不太确定的第二部分)。

共享内存是一个选项:您在谈论什么数据?这个“对象”看起来像什么?json_编码然后存储在MySQL中?我知道的所有选项都需要序列化。如果这就是你想要避免的,让我知道你什么时候能找到避免的方法:P@ManseUK我认为json_编码比php的序列化慢。。。但我可能错了,Marc B建议使用php信号量函数shm_*,但这需要传递给php.exe的参数才能启用它。这是我可以在我的PC上做的,但不能在我的共享主机服务器上做。我很困惑now@JonDinham,即使使用文件,也需要先序列化数据,不是吗?