PHP session_start不起作用

时间:2016-10-16 07:18:40

标签: php session cookies

我的问题是,当我使用session_start();在我的PHP代码中,而不是设置PHPSESSID cookie,一个空白标题和值的cookie" HttpOnly"而是设置。使用var_dump($ _ SESSION),我看到我可以设置会话变量,它们会在页面上显示,但它们不会在任何其他页面上显示。对于它的价值,这两个页面位于:login.domain.com/index.php和login.domain.com/login。相同的代码在本地工作正常,并且在同一服务器上的不同子域上运行的其他php文件可以正常工作。我无法找到任何信息,所以如果有人有任何想法,我很乐意听到。

这是关于index.php的php:

    <?php
        session_start();
    ?>

这是登录/ login.php上的php

<?php
session_start();
$role = 0; //default to "guest"
$was_success = false; //default to a failed login
if(isset($_POST["user"]) && isset($_POST["password"])){ //if the post details are set then continue
    $pass = password_hash("PASSWORD", PASSWORD_DEFAULT);

    if (!isset($_COOKIE["mellifluous_loginRefer"])){
            $arr = array("Username" => $_POST["user"],
            "Error" => "No destination set!",
            "Success" => false
            );
            die(json_encode($arr));
    }

    if (password_verify($_POST["password"], $pass) && ($_POST["user"] == "USER")){
       $was_success = true;
       if ($_COOKIE['mellifluous_loginRefer'] == "home"){
          $_SESSION['mellifluous']['home']['username'] = $_POST['user'];
       }
    }
    else $was_success = false;
    $arr = array("Username" => $_POST["user"],
                 "Role" => $role,
                 "Success" => $was_success
    );
    if ($was_success) setcookie("mellifluous_loginRefer", "", time() - 10, "/");
    echo(json_encode($arr));
    //echo "You sent in: ";//Username: " . $_POST["user"] . " Password: ";//. $password;
}
else if(isset($_GET["user"]) && isset($_GET["password"])){
    die("This interface has been deprecated.");
    //$pass = password_hash($_POST["password"], PASSWORD_DEFAULT);
    $arr = array("Username" => $_GET["user"]);
    echo(json_encode($arr));
    //echo "You sent in: ";//Username: " . $_POST["user"] . " Password: ";//. $password;
}
else{
    die("ERROR!");
}
?>

非常感谢提前!

3 个答案:

答案 0 :(得分:1)

检查服务器上php.ini文件中的session.use_cookiessession.use_only_cookies的已分配值。

您需要在php.ini中设置session.use_cookiessession.use_only_cookies的值:

session.use_cookies=1
session.use_only_cookies=0

答案 1 :(得分:0)

我明白了。我的apache2 conf文件中有一些奇怪的cookie设置,看起来很奇怪/不合适:

     Header set Set-Cookie HttpOnly;Secure
     Header always edit Set-Cookie (.*) "$1; HTTPOnly"
     Header always edit Set-Cookie (.*) "$1; Secure"

一旦我删除了这些行,事情就可以了。

答案 2 :(得分:0)

我无法回答前两个答案,但实际上您不应该这样做。

session.use_only_cookies是一项安全功能,它可以防止使用URL内部的会话标识进行攻击。有关更多信息,请参见php文档。

 Header set Set-Cookie HttpOnly;Secure
 Header always edit Set-Cookie (.*) "$1; HTTPOnly"
 Header always edit Set-Cookie (.*) "$1; Secure"

关于这一部分,HTTPOnly是必需的,它可以防止cookie被XSS攻击窃取。实际上,对于Javascript,默认情况下可以显示PHPSESSID值。如果不是HTTP,则此功能不向源请求提供值。不确定, see OWASP recommandation for more informations.

关于Secure属性,仅当请求通过安全通道(HTTPS)传输时,用户代理才会将cookie包含在HTTP请求中。see OWASP recommandation for this feature