Php setcookie()未创建cookie
我正试图创建一个“记住我”登录的基础上,我已经找到了一个答案,通过查看stackoverflow。 它似乎不起作用,一旦登录,它只是创建一个Php setcookie()未创建cookie,php,cookies,Php,Cookies,我正试图创建一个“记住我”登录的基础上,我已经找到了一个答案,通过查看stackoverflow。 它似乎不起作用,一旦登录,它只是创建一个PHP会话,而不是创建一个PHP会话和一个Cookie Google Chrome开发者工具: index.php: include('./config.php'); include('./cookie-check.php'); include('./redirect.php'); print_r($_SESSION);
PHP会话
,而不是创建一个PHP会话
和一个Cookie
Google Chrome开发者工具:
index.php
:
include('./config.php');
include('./cookie-check.php');
include('./redirect.php');
print_r($_SESSION);
if(!isset($_SESSION['cookie']) && empty($_SESSION['user_is_loggedin'])) {
CheckCookieLogin();
if(isset($_SESSION['userID'])) {
?>
<p>Logged In</p>
<a href="./action.php?a=logout">Logout</a>
<?php
} else {
?>
<form method="post" action="./action.php?a=login">
<input name="formName" type="text" placeholder="username" autocomplete="off" autofocus required />
<input name="formPass" type="password" placeholder="username" autocomplete="off" required />
<button type="submit">login</button>
</form>
<?php
};
} else {
?>
<p>Logged In</p>
<a href="./action.php?a=logout">Logout</a>
<?php
};
?>
action.php
:
include('./config.php');
include('./cookie-check.php');
include('./redirect.php');
print_r($_SESSION);
if(!isset($_SESSION['cookie']) && empty($_SESSION['user_is_loggedin'])) {
CheckCookieLogin();
if(isset($_SESSION['userID'])) {
?>
<p>Logged In</p>
<a href="./action.php?a=logout">Logout</a>
<?php
} else {
?>
<form method="post" action="./action.php?a=login">
<input name="formName" type="text" placeholder="username" autocomplete="off" autofocus required />
<input name="formPass" type="password" placeholder="username" autocomplete="off" required />
<button type="submit">login</button>
</form>
<?php
};
} else {
?>
<p>Logged In</p>
<a href="./action.php?a=logout">Logout</a>
<?php
};
?>
<?php
$currentPage = basename($_SERVER['PHP_SELF']);
session_start();
$users = new mysqli("localhost", "root", "######", "web_users");
if ($users->connect_errno) {
printf("Connect failed: %s\n", $users->connect_error);
exit();
};
?>
<?php
include('./config.php');
include('./better_crypt.php');
if(isset($_GET['a'])) {
$action = $_GET['a'];
if($action == 'login') {
$formName = $_POST['formName'];
$formPass = $_POST['formPass'];
$ip = $_SERVER['REMOTE_HOST'];
$checkName = $users->prepare("SELECT userID,userPass FROM users WHERE userName=? LIMIT 1");
$checkName->bind_param("s", $formName);
$checkName->execute();
$checkName->store_result();
if($checkName->num_rows > 0) {
$checkName->bind_result($userID,$userPass);
while($checkName->fetch()) {
if(hash_equals($userPass, better_crypt($formPass,$userPass))) {
$_SESSION['userID'] = $userID;
$_SESSION['user_is_loggedin'] = 1;
$cookiehash = md5(sha1($formName . $ip));
setcookie("uname",$cookiehash,time()+3600*24*365,'/','fmadev.fma.uk.com');
$remember = $users->prepare("UPDATE users SET login_session=? WHERE userID=?");
$remember->bind_param("si", $cookiehash,$userID);
$remember->execute();
$remember->close();
?>
<p>Logged In</p>
<?php
} else {
?>
<p>Invalid Password</p>
<?php
};
};
} else {
?>
<p>Invalid Username</p>
<?php
};
$checkName->close();
} else if($action == "logout") {
if(isset($_SESSION['userID'])) {
$userID = $_SESSION['userID'];
$logout = $users->prepare("UPDATE users SET login_session=null WHERE userID=?");
$logout->bind_param("i", $userID);
if($logout->execute()) {
$_SESSION['cookie'] = $uname;
setcookie("uname",$uname,0,'/','fmadev.fma.uk.com');
session_unset();
?>
<p>Logging out</p>
<?php
} else {
?>
<p>Unable to logout, try again...</p>
<?php
};
$logout->close();
} else {
?>
<p>You must be logged in first</p>
<?php
};
} else {
?>
<p>A valid action is required</p>
<?php
};
} else {
?>
<p>An action is required</p>
<?php }; ?>
<?php
function CheckCookieLogin() {
$uname = $_COOKIE['uname'];
if (!empty($uname)) {
$users = new mysqli("localhost", "root", "######", "web_users");
if ($users->connect_errno) {
printf("Connect failed: %s\n", $users->connect_error);
exit();
};
$check = $users->prepare("SELECT userID FROM users WHERE login_session=? LIMIT 1");
$check->bind_param("s", $uname);
$check->execute();
$check->store_result();
if($check->num_rows > 0) {
$_SESSION['user_is_loggedin'] = 1;
$_SESSION['cookie'] = $uname;
setcookie("uname",$uname,time()+3600*24*365,'/','fmadev.fma.uk.com');
$check->bind_result($userID);
while($check->fetch()) {
$_SESSION['userID'] = $userID;
};
};
$check->close();
};
};
?>
这段代码中没有创建cookie有什么原因吗?我是通过IP而不是域名连接到站点的,所以cookie没有创建。您看过文档吗?另外:检查设置cookie的内容returns@MeneerVenus,仔细看,似乎我都遵守了。但即使在刷新页面后,cookie仍然不存在。我仍然无法解决此问题。将
$\u服务器['HTTP\u HOST']
设置为cookie的域,而不是硬编码的值,可能会很有用。@meneervins好主意!