【问题标题】:PHP 8.0 PHP.ini syntax for session_set_cookie_paramssession_set_cookie_params 的 PHP 8.0 PHP.ini 语法
【发布时间】:2021-06-27 23:56:57
【问题描述】:

我正在配置 php.ini 文件,试图了解 php.ini 文件的正确语法并设置 session-set-cookie.params。首先,不清楚设置是否需要用引号引起来?有人可以提供一个正确语法的例子吗?我的目标是我希望在我的网站上的所有子域中都可以使用会话变量。它还说,“......您需要在调用 session_start() 之前为每个请求调用 session_set_cookie_params()。”所以基本上,我需要

<?php 
session_set_cookie_params()
session_start()
// PHP CODE HERE

?> 

对吗?这是我目前所了解的网页和 php.ini 代码。

https://www.php.net/manual/en/function.session-set-cookie-params.php.

session_set_cookie_params(
        int $lifetime_or_options,
        string|null $path = null,
        string|null $domain = null,
        bool|null $secure = null,
        bool|null $httponly = null
    ): bool

这是我目前的配置文件。

 session_set_cookie_params(
    600 $lifetime_or_options,
    $path = .mywebsite.com,
    $domain = /,
    $secure = null,
    $httponly = null
): bool

【问题讨论】:

    标签: php


    【解决方案1】:

    在我看来,您并没有尝试在此处修改 php.ini(php.ini 是在 PHP 之前加载的静态服务器范围配置文件),而是在运行时通过 PHP 代码设置 PHP 的 ini 值。为此,我认为您只是误读了文档中的函数定义,即参数的表达方式。

    在更高版本的 PHP 中(您使用 8 来计算),最好将参数作为数组传递。这在文档中的 PHP 7.3.0 中可用的替代签名 下列出。当文档提到值 $lifetime_or_options 时,它们意味着参数可以是整数生命周期值 (600) 或所有选项的 数组

    []将它们捆绑在一个数组中:

    session_set_cookie_params([
      'lifetime' => 600,
      'path' => '/',
      'domain' => '.yoursite.example.com',
      'secure' => true,
      'httponly' => true
    ]);
    

    请注意,我已将 securehttponly 设置为 true。 httponly 将阻止 javascript 访问会话 cookie,这在大多数情况下是合适的。但是,如果您需要会话在没有 SSL 的情况下工作,请将 secure 设置为 false - 当我设置为 true 时,会话 cookie 将仅通过 https 传输。

    我还切换了您的 pathdomain 值。

    另一种较旧的表达方式是直接将单个值作为函数参数传递 - 我认为您在文档中误解了这部分。

    session_set_cookie_params(600, '/', '.yoursite.example.com', true, true);
    

    还请注意,对于会话 cookie,600 的生命周期非常短,只有 10 分钟。你可能需要它来延长寿命。

    【讨论】:

    • 谢谢。你是对的,是误读了它,我认为你必须从本质上编辑 php.ini。您编辑您的 php 代码并在 session_start() 之前插入 session_set_cookie_params,而不是在 php.ini 文件中!这工作......对编辑 php.ini 文件感到非常困惑,你不编辑它,你别管它。另外,您将 session_set_cookie_params 放入了哪些 php 文件?你需要把它放在每个使用会话数据的 php 文件中吗?我有一个可以访问变量的子域……反之亦然。我知道你需要把 session_start() 但是 session_set_cooke_params 呢?
    • @nwood21 将session_set_cookie_params() 放置在您调用session_start() 的每个位置,因此您的代码中的每个文件都希望访问$_SESSION。将session_set_cookie_params() 视为session_start() 的修饰符,并始终在session_start() 之前调用它。
    猜你喜欢
    • 2013-03-12
    • 1970-01-01
    • 2015-11-27
    • 2021-10-19
    • 1970-01-01
    • 2021-04-20
    • 2021-09-29
    • 2015-05-09
    • 2015-12-30
    相关资源
    最近更新 更多