【问题标题】:Unable to generate Session ID with correct cookie params无法使用正确的 cookie 参数生成会话 ID
【发布时间】:2016-12-06 12:03:55
【问题描述】:

我目前正在创建一个 PHP 登录系统,并认为我会根据研究建议为此使用会话 ID cookie。当然,我想让它尽可能安全,因此我将 httponly cookie 参数设置为 true。

现在的问题是,如果我在调用 session_start() 函数之前尝试设置会话 cookie 参数,它似乎根本没有创建会话 id cookie,而如果我以相反的方式执行它。当然,如果我以相反的方式执行,则不会设置参数。

所以要明确一点,这甚至不会生成会话 ID cookie:

$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"],
    $cookieParams["path"], 
    $cookieParams["domain"], 
    $secure,
    $httponly);

session_start();

这确实会生成一个,但没有适当的参数。 (我通过在浏览器中检查我的 cookie 信息确认了这一点)

session_start();
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"],
    $cookieParams["path"], 
    $cookieParams["domain"], 
    $secure,
    $httponly);

我想不出为什么会发生这种情况,也不知道如何解决这个问题。 如果有人可以帮助我,那就太好了。

提前致谢!

【问题讨论】:

  • 您要设置的值是什么,例如$secure 是什么?
  • Secure 和 httponly 都是真的。我使用了他们在此处提供的示例link
  • 您是否通过 https 加载页面/该域是否有 ssl 证书?
  • 不只是基本的http

标签: php session-cookies


【解决方案1】:

当您通过 http 而不是通过 https 加载页面时,您不能将 $secure 参数设置为 true。如果您这样做,您将永远不会收到 cookie,因为您刚刚指定 cookie 只能通过安全连接发送。

所以你需要使用默认或者手动设置为false

$cookieParams = session_get_cookie_params();
session_set_cookie_params(
    $cookieParams["lifetime"],
    $cookieParams["path"], 
    $cookieParams["domain"], 
    false,    // $cookieParams["secure"] will also work if you have not modified php.ini to set it to true
    $httponly
);

session_start();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 2019-03-30
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多