2016-10-16 2 views
1

Моя проблема в том, что когда я использую session_start(); в моем php-коде вместо установленного cookie-файла PHPSESSID вместо него устанавливается cookie с пустым заголовком и значением «HttpOnly». Используя var_dump ($ _ SESSION), я вижу, что я могу установить переменные сеанса, и они будут отображаться на странице, но они не будут отображаться ни на одной другой странице. Для чего это стоит, эти две страницы: login.domain.com/index.php и login.domain.com/login. Один и тот же код работает нормально локально, а другие php-файлы, работающие на разных поддоменах на одном сервере, работают. Я не могу найти никакой информации, поэтому, если у кого есть какие-то идеи, я бы хотел их услышать.PHP session_start не работает

Это PHP на index.php:

<?php 
     session_start(); 
    ?> 

И это РНР на входе/login.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!"); 
} 
?> 

Большое спасибо заранее!

+0

проверьте, не осталось ли перед пробелом перед ''? Php'' перед сеансом 'session_start' –

+0

, но он не работает на другом сервере. это вопрос не так ли? – user3099298

+0

@PrasunJajodia Нет пробелов. –

ответ

0

Я понял это. У меня были некоторые странные настройки печенья в моей конф файле apache2 для этого сайта, которые выглядели странно/неуместны:

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

После того, как я удалил эти строки, все работало нормально.

1

Проверьте назначенные значения на session.use_cookies, session.use_only_cookies на файл php.ini на вашем сервере.

Вам необходимо установить значение session.use_cookies и session.use_only_cookies в php.ini:

session.use_cookies=1 
session.use_only_cookies=0 
+0

Я пробовал это, но проблема все еще существует. –

Смежные вопросы