【问题标题】:PHP SESSION works only over HTTPS + PHPSESSID cookie is not sentPHP SESSION 仅适用于 HTTPS + PHPSESSID cookie 未发送
【发布时间】:2014-08-11 08:10:18
【问题描述】:

我有示例页面 其内容如下代码:

<?php 
session_start();
if (isset($_SESSION['test'])){
    echo 'Session variable is set ';
    echo $_SESSION['test'];
}else{
    echo 'Session variable is not set';
    $_SESSION['test'] = 'test';
}

当我通过 HTTPS 访问页面时(例如:https://www.example.com/page.php) 它运行良好,第一次设置 $_SESSION 变量,然后正常检索它。

但是,当我通过普通 HTTP 访问页面时,每次我都会收到“未设置会话变量”。 当我在这两种情况下检查请求/响应 cookie 时,我发现当使用 HTTPS 时,PHPSESSID cookie 是从页面的第一个请求中检索的,并且从同一 PHPSESSID 上的第二个请求中作为请求 cookie 发送。 但是,每次我加载页面时,通过正常的 HTTP 加载时,它都会在不发送任何 cookie 的情况下加载,它会获取不同的 PHPSESSID cookie,但不会将其保存并用于页面的下一个请求。

我想知道这个问题的原因和解决方法。

谢谢。

【问题讨论】:

    标签: php session cookies


    【解决方案1】:

    会话 cookie 可以设置为仅受保护的

    尝试使用 session_set_cookie_params 仅禁用安全会话 cookie

    $oldparams = session_get_cookie_params();
    session_set_cookie_params($oldparams["lifetime"], $oldparams["path"], $oldparams["domain"], false, true);
    session_start();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-21
      • 2011-02-16
      • 2012-08-19
      • 2013-06-07
      • 1970-01-01
      • 2012-02-26
      • 2018-01-05
      • 2014-08-21
      相关资源
      最近更新 更多