【问题标题】:Zend_Session where is the cookie?Zend_Session cookie 在哪里?
【发布时间】:2012-03-19 07:51:08
【问题描述】:

我在每个请求上都使用 Zend_Session::start() 因为我需要保存各种请求之间的值(例如用户和密码以便在将来访问数据库时重新使用它)。

我想知道当我使用 Zend_Session::start() 时是否创建了 cookie,最重要的是我可以看到存储路径的位置(服务器和客户端)。

我读到实际上会话的使用涉及 cookie 的创建,但我不确定 Zend_Session 是否也是如此,看到还有 Zend_Http_Cookie

【问题讨论】:

    标签: php zend-framework session session-cookies


    【解决方案1】:

    来自Zend_Session documentation

    Zend_Session 在内部使用普通的 PHP ext/session 函数,所有熟悉的配置选项和设置都适用(参见http://www.php.net/session

    你也可以使用Zend_Session::setOptions()配置Zend_Session的一些行为:

    Zend_Session::setOptions(array(
      'use_only_cookies' => 'on',
      'remember_me_seconds' => 864000
    ));
    

    另见Zend_Session Advanced Usage

    【讨论】:

      【解决方案2】:

      Zend_Session 扩展了标准的 PHP 会话功能,所以是的,启动会话会设置一个 cookie。会话数据的存储位置取决于您的配置,默认情况下,数据存储在文件中,其位置由配置值session.save_path 控制。

      您通常不会将密码存储在会话中 - 一旦用户通过身份验证,您可能只将用户名存储在会话中以供以后访问。如果您使用该组件,Zend_Auth 将为您处理所有这些。

      忘记 Zend_Http_Cookie,它与用户 cookie 无关。

      【讨论】:

      • 谢谢!!如果我只将用户名保存到会话中,我在哪里可以获取密码来连接数据库?
      • 这个想法是您仅在用户通过身份验证(即他们已登录)后存储用户名。然后在后续请求中,您可以相信会话中的用户名属于当前用户,因此您不需要密码。
      • 好的,但是在我的 Web 应用程序中,在后续请求中,我需要调用方法 i5_connect($user,$pwd) 以从 DB2 获取数据。哪里不需要密码?
      • 该方法是否为您的应用程序使用的当前用户加载数据?还是别的什么?
      • 此方法与 mysq_connect() 相同,但我使用此方法连接到 ibmI 上的 DB2。我需要创建连接(我更喜欢使用他的凭据为每个用户创建连接)
      【解决方案3】:

      所有会话都需要某种方式让客户端进行身份验证。

      意思是,服务器将给客户端一个密钥(或会话 ID),通常以 cookie 的形式,并将会话变量(在内部,在服务器端)链接到该 ID。

      当客户端发送请求时,它还会发送带有 cookie 的会话 ID,这允许服务器获取与该 ID 关联的变量,并允许程序员使用。

      cookies 的路径因浏览器而异。

      这意味着客户端只有ID,客户端不知道会话变量中有什么,他看不到它们。


      现在我不太了解 Zend,但我假设 Zend_Session 用于会话,而 Zend_Http_Cookie 用于实际 cookie(其中变量本身的值存储在 cookie 中)。不要将关键信息存储在 cookie 中,因为它很容易读取和更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-10
        • 1970-01-01
        • 2010-10-20
        • 2019-12-29
        • 2016-09-01
        • 2011-06-13
        • 2019-06-04
        • 1970-01-01
        相关资源
        最近更新 更多