【发布时间】:2017-02-25 08:16:36
【问题描述】:
我的问题是,当我使用 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之前的session_start之前留下了空白 -
会话在本地工作,但在另一台服务器上不起作用。这不是问题吗?
-
@PrasunJajodia 没有空格。
-
@user3099298 是的,这就是问题所在。
-
我不认为 php 会话不起作用,请尝试您源代码中的简单测试 php 会话: index.php login.php 如果您的 login.php 页面显示:1 表示 php 会话运行良好,如果运行良好,请检查您当前的源代码