簡體   English   中英

PHP session_start 不起作用

[英]PHP session_start doesn't work

我的問題是,當我使用 session_start(); 在我的 php 代碼中,沒有設置 PHPSESSID cookie,而是設置了一個具有空白標題和值“HttpOnly”的 cookie。 使用 var_dump($_SESSION),我看到我可以設置會話變量,它們會顯示在頁面上,但不會顯示在任何其他頁面上。 就其價值而言,這兩個頁面位於:login.domain.com/index.php 和 login.domain.com/login。 相同的代碼在本地運行良好,運行在同一服務器不同子域上的其他 php 文件也可以正常運行。 我找不到任何信息,所以如果有人有任何想法,我很想聽聽。

這是 index.php 上的 php:

    <?php
        session_start();
    ?>

這是 login/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!");
}
?>

非常感謝提前!

檢查服務器中 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

我想通了。 我的 apache2 conf 文件中有一些奇怪的 cookie 設置,用於該站點,看起來很奇怪/不合適:

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

一旦我刪除了這些行,事情就正常了。

我無法回答前兩個答案,但實際上您不應該這樣做。

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,則此功能不向源請求提供值。 不確定是否清楚,請參閱 OWASP 推薦以獲取更多信息。

關於Secure屬性,只有當請求通過安全通道 (HTTPS) 傳輸時,用戶代理才會在 HTTP 請求中包含 cookie。 請參閱此功能的 OWASP 推薦

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM