在我尝试的几乎所有浏览器中,我的应用程序的cookie都是正常创建的,并且应该保持原样。但是在Opera for android上,浏览器看不到cookie。要么它不能识别它,要么没有创建cookie,要么在某些时候删除它。有人看到我的代码有问题吗?
这是登录页面的片段
require("inc/dbinfo.inc");
$fc_username = trim($_POST['username']);
$fc_password = trim($_POST['password']);
$hashedPass = hash( "sha256", $fc_password );
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare(" << AUTHENTICATE USER >> ");
$stmt->execute(array($fc_username,$hashedPass));
// set the resulting array to associative
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$result = $stmt->fetchAll();
if(sizeof($result) == 1){
// Login success!
// Bake up a cookie
$cookie_expire = time()+86400; // 24 hr life
//time() - 3600; // overdue expiration date. deletes cookie
$cookie_domain = $_SERVER['HTTP_HOST'];
setcookie("userid", $result[0]["id"], $cookie_expire, $cookie_domain);
setcookie("name", $result[0]["name"], $cookie_expire, $cookie_domain);
header("Location: welcome.php");
exit;
}else{
// Login failure
header("Location: login.php?msg=badlogin");
exit;
}
}catch(PDOException $e){
echo "Error: " . $e->getMessage();
}
$conn = null;
从主页:
<?php
if(!isset($_COOKIE['name']) && !isset($_COOKIE['userid'])){
header("Location: login.php?msg=nocookie");
exit;
}
?>
您可能会注意到我的setcookie实现与official documentation不同。我在previous question中详细说明了这一点,但这是唯一适用于我的实现。问题可能出在这里,但我还没有找到任何其他工作方式来使用setcookie。不确定是什么导致了这个问题。
提前致谢。