我们如何使Zend会话存储在可用的方法中持久化


how can we make Zend session storage as persistent among available methods?

我对Zend身份验证会话存储系统有点困惑。我会试着解释我的问题。请试着表达你的意见或任何你知道的关于会议或我的假设和问题。

默认情况下,Zend_Auth_Adapter_DbTable在认证成功时返回提供给auth对象的身份。如果我使用getStorage()或getIdentity(),那么我就能够检索到一些变量的"会话值(id, name,…)"。!!如果你认为以上两种假设都是正确的,我的问题是,

  1. 默认情况下会话值存储在哪里?(默认情况下,它使用哪个位置存储会话?)
  2. 如果我像下面这样指定会话保存路径。如果会话根据问题1进行存储,为什么我们需要将这些会话存储在文件夹中?save_path =/home/myaccount/zend_sessions/myapp
  3. 如果我使用Zend_Session_SaveHandler_DbTable。是什么让它比以上两种选择更好?
  4. 或者,你能建议哪种方式,我们可以使会话持久在Zend ?目前我们有100万注册用户,那么我们如何高效地存储用户会话?

提前感谢所有将要参与讨论的人,如果你认为我的任何问题或假设是错误的,请尝试表达你的方式。所以我可以从错误中学习

我不是100%确定你的问题,但我会尽量回答:-)

  1. 在默认的linux操作系统中,它应该是/tmp或php.ini
  2. 中配置的任何内容。
  3. 考虑共享主机环境(安全问题)
  4. Zend_Session_SaveHandler_DbTable是很好的,如果你有,例如,负载均衡的web服务器,所以用户有他的会话独立于他连接到的web服务器
  5. 如果你只使用一个服务器(不是共享的),并且不需要像"谁在线"这样的功能,在文件系统上默认的会话处理是最好的解决方案(在我看来)。
  1. Zend session内部使用php全局变量$_SESSION, session保存的路径由php.ini设置控制,所以你可以使用session_save_path

  2. 对于session_save_path,您可以指定需要保存会话的文件夹名称。默认情况下,会话存储在临时文件夹中,每次有人清除临时文件夹会话数据将丢失。所以最好使用其他文件夹。

  3. Db会话用于会话共享。在像谷歌这样的大型网站,一个服务器不会服务所有用户的请求,所以如果你请求的东西,会话将被创建,你会得到响应,对于你的下一个请求,没有保证你会击中相同的服务器,在这种情况下,第二个服务器试图从一些分布式位置获取会话数据,如db或memcache。对于分布式会话,Memcache是比db更好的选择,因为它更快。

  4. 你想在会话中保存什么信息,如果你想保存更长的时间,那么为什么你不能将这些信息与用户对象相关联,而不是保存在会话中。