【问题标题】:how can we make Zend session storage as persistent among available methods?我们如何使 Zend 会话存储在可用方法中持久化?
【发布时间】:2011-07-10 18:31:45
【问题描述】:

我对 Zend 身份验证会话存储系统有点困惑。我将尝试解释我的问题。请尝试表达您对 zend session 或我的假设和问题的看法或您所知道的任何事情。

默认情况下,Zend_Auth_Adapter_DbTable 在认证成功后将提供的身份返回给 auth 对象。 如果我使用 getStorage() 或 getIdentity(),那么我可以将“会话值(id,名称,..)”检索到一些变量。 !! 如果您认为以上两个假设都是正确的,那么我的问题是,

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

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

【问题讨论】:

  • 不确定这是否是您想要的,但您可以使用Zend_Session::rememberMe()。这将记住登录的用户,因此当用户返回您的应用程序时,不需要登录。

标签: php zend-framework zend-auth zend-session


【解决方案1】:

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

  1. 在默认的 linux 机器上,它应该是 /tmp 或 php.ini 中配置的任何内容
  2. 考虑共享托管环境(安全问题)
  3. Zend_Session_SaveHandler_DbTable 如果您有负载平衡的 Web 服务器,那么它非常好,因此用户的会话独立于他连接到的 Web 服务器
  4. 如果您只使用一台服务器(未共享),并且不需要“谁在线”之类的功能,则文件系统上的默认会话处理是最好的解决方案(在我看来)。

【讨论】:

  • 您正确的 arnieRie,但如果我在文件系统上保留默认会话处理,有时当我刷新时它给了我应用程序错误,如果再次刷新它就消失了。但是现在它是有道理的
【解决方案2】:
  1. Zend session内部使用php全局变量$_SESSION,session保存路径由php.ini设置控制,所以可以使用session_save_path

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

  3. 数据库会话用于会话共享。在像谷歌这样的大型网站中,一个服务器不会满足所有用户的请求,所以如果你请求了一些东西,会话将被创建并且你会得到响应,对于你的下一个请求,不能保证你会访问同一个服务器,在这种情况下第二台服务器尝试从一些分布式位置(如 db 或 memcache)获取会话数据。 Memcache 是分布式会话的最佳选择,因为它更快。

  4. 您尝试在会话中保存哪些信息,如果您尝试将其保存更长时间,那么为什么不能将该信息与用户对象相关联而不是保存在会话中。

【讨论】:

    猜你喜欢
    • 2021-06-05
    • 2013-04-07
    • 2011-02-28
    • 2015-01-18
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    相关资源
    最近更新 更多